@mediusinc/mng-commons 5.5.0 → 6.0.0-rc.3

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 (300) hide show
  1. package/core/action/action-parameters.model.d.ts +4 -4
  2. package/core/data-providers/base.data-provider.d.ts +4 -7
  3. package/core/data-providers/lookup.data-provider.d.ts +2 -2
  4. package/core/descriptors/model.descriptor.d.ts +1 -7
  5. package/core/descriptors/tableview.descriptor.d.ts +5 -5
  6. package/core/helpers/notification.d.ts +17 -1
  7. package/core/helpers/route.d.ts +0 -1
  8. package/core/helpers/type-helpers.d.ts +8 -0
  9. package/core/i18n/i18n-error.d.ts +2 -3
  10. package/core/index.d.ts +0 -3
  11. package/core/models/menu.model.d.ts +0 -4
  12. package/core/router/route-builder.d.ts +1 -1
  13. package/core/services/commons.service.d.ts +0 -32
  14. package/core/services/tokens/module-config.token.d.ts +0 -28
  15. package/esm2022/core/action/action-parameters.model.mjs +1 -1
  16. package/esm2022/core/data-providers/base.data-provider.mjs +2 -4
  17. package/esm2022/core/data-providers/lookup.data-provider.mjs +1 -1
  18. package/esm2022/core/descriptors/model.descriptor.mjs +1 -1
  19. package/esm2022/core/descriptors/tableview.descriptor.mjs +1 -1
  20. package/esm2022/core/helpers/notification.mjs +19 -4
  21. package/esm2022/core/helpers/type-helpers.mjs +1 -1
  22. package/esm2022/core/i18n/i18n-error.mjs +10 -8
  23. package/esm2022/core/index.mjs +1 -4
  24. package/esm2022/core/models/menu.model.mjs +1 -1
  25. package/esm2022/core/router/route-builder.mjs +2 -2
  26. package/esm2022/core/services/commons.service.mjs +1 -34
  27. package/esm2022/core/services/tokens/module-config.token.mjs +1 -1
  28. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +5 -86
  29. package/esm2022/filter/descriptors/filter.descriptor.mjs +7 -29
  30. package/esm2022/form/api/data-providers/lookup-data-provider.factory.mjs +14 -41
  31. package/esm2022/form/api/data-providers/lookup.data-provider.mjs +3 -3
  32. package/esm2022/form/api/descriptors/action-button.descriptor.mjs +5 -17
  33. package/esm2022/form/api/descriptors/button-style.builder.mjs +80 -101
  34. package/esm2022/form/api/index.mjs +2 -1
  35. package/esm2022/form/api/models/button.model.mjs +2 -0
  36. package/esm2022/model/class/data-providers/base-from-class-data-provider.factory.mjs +5 -0
  37. package/esm2022/model/class/descriptors/model-class.descriptor.mjs +28 -0
  38. package/esm2022/model/class/descriptors/type-class.descriptor.mjs +6 -0
  39. package/esm2022/model/class/helpers/model.mjs +53 -0
  40. package/esm2022/model/class/index.mjs +8 -0
  41. package/esm2022/model/class/mediusinc-mng-commons-model-class.mjs +5 -0
  42. package/esm2022/model/data-providers/base-from-type-data-provider.factory.mjs +11 -6
  43. package/esm2022/model/descriptors/model.descriptor.mjs +11 -54
  44. package/esm2022/model/descriptors/type.descriptor.mjs +2 -10
  45. package/esm2022/model/helpers/i18n.mjs +14 -9
  46. package/esm2022/model/index.mjs +1 -2
  47. package/esm2022/table/api/class/class-table-attribute-converter.mjs +80 -0
  48. package/esm2022/table/api/class/class-table-attribute.model.mjs +2 -0
  49. package/esm2022/table/api/class/class-table-data-provider.factory.mjs +5 -0
  50. package/esm2022/table/api/class/class-table-descriptor-helpers.mjs +99 -0
  51. package/esm2022/table/api/class/class-table-descriptor.factory.mjs +21 -0
  52. package/esm2022/table/api/class/index.mjs +6 -0
  53. package/esm2022/table/api/class/mediusinc-mng-commons-table-api-class.mjs +5 -0
  54. package/esm2022/table/api/data-providers/table-data-provider.factory.mjs +14 -41
  55. package/esm2022/table/api/data-providers/table.data-provider.mjs +3 -9
  56. package/esm2022/table/api/descriptors/column.descriptor.mjs +8 -3
  57. package/esm2022/table/api/descriptors/table-descriptor.factory.mjs +10 -77
  58. package/esm2022/table/api/descriptors/table.descriptor.mjs +3 -3
  59. package/esm2022/table/api/helpers/column-converter.mjs +25 -0
  60. package/esm2022/table/api/helpers/table-data-provider-descriptor-convert.mjs +4 -4
  61. package/esm2022/table/api/index.mjs +2 -4
  62. package/esm2022/table/api/models/table-columns.model.mjs +1 -1
  63. package/esm2022/table/components/column-value/column-value.component.mjs +7 -5
  64. package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +3 -3
  65. package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +5 -5
  66. package/esm2022/table/components/table/table.component.mjs +17 -18
  67. package/esm2022/table/helpers/notification.mjs +19 -13
  68. package/esm2022/tableview/action/components/action/action.component.mjs +41 -37
  69. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +22 -13
  70. package/esm2022/tableview/action/helpers/action-execution.mjs +1 -1
  71. package/esm2022/tableview/action/helpers/i18n.mjs +50 -30
  72. package/esm2022/tableview/action/helpers/notification.mjs +73 -12
  73. package/esm2022/tableview/action/helpers/styles.mjs +2 -2
  74. package/esm2022/tableview/action/models/execution/action-context.model.mjs +1 -1
  75. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +1 -1
  76. package/esm2022/tableview/action/services/action-executor.service.mjs +92 -75
  77. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +18 -3
  78. package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +13 -104
  79. package/esm2022/tableview/api/action/descriptors/action-editor-descriptor.factory.mjs +15 -62
  80. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +35 -82
  81. package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +20 -33
  82. package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +1 -1
  83. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +54 -95
  84. package/esm2022/tableview/api/action/descriptors/editor-action-descriptor.factory.mjs +21 -0
  85. package/esm2022/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.mjs +21 -0
  86. package/esm2022/tableview/api/action/descriptors/table-action-descriptor.factory.mjs +37 -0
  87. package/esm2022/tableview/api/action/descriptors/table-action-editor-descriptor.factory.mjs +40 -0
  88. package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +25 -5
  89. package/esm2022/tableview/api/action/models/action-confirmation.model.mjs +2 -0
  90. package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +1 -1
  91. package/esm2022/tableview/api/action/models/action-error.model.mjs +1 -1
  92. package/esm2022/tableview/api/action/models/execution/action-context-validation.model.mjs +1 -1
  93. package/esm2022/tableview/api/action/models/execution/action-context.model.mjs +1 -1
  94. package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +1 -1
  95. package/esm2022/tableview/api/action/models/tableview-action-default-categories.model.mjs +6 -6
  96. package/esm2022/tableview/api/action/services/data-provider-executor.service.mjs +3 -3
  97. package/esm2022/tableview/api/class/editor/class-editor-attribute-converter.mjs +85 -0
  98. package/esm2022/tableview/api/class/editor/class-editor-attribute.model.mjs +2 -0
  99. package/esm2022/tableview/api/class/editor/class-editor-data-provider.factory.mjs +5 -0
  100. package/esm2022/tableview/api/class/editor/class-editor-descriptor-helpers.mjs +95 -0
  101. package/esm2022/tableview/api/class/editor/class-editor-descriptor.factory.mjs +21 -0
  102. package/esm2022/tableview/api/class/index.mjs +13 -0
  103. package/esm2022/tableview/api/class/mediusinc-mng-commons-tableview-api-class.mjs +5 -0
  104. package/esm2022/tableview/api/class/tableview/class-tableview-attribute-converter.mjs +35 -0
  105. package/esm2022/tableview/api/class/tableview/class-tableview-attribute.model.mjs +2 -0
  106. package/esm2022/tableview/api/class/tableview/class-tableview-data-provider.factory.mjs +5 -0
  107. package/esm2022/tableview/api/class/tableview/class-tableview-descriptor-helpers.mjs +111 -0
  108. package/esm2022/tableview/api/class/tableview/class-tableview-descriptor.factory.mjs +26 -0
  109. package/esm2022/tableview/api/editor/data-providers/editor-data-provider.factory.mjs +14 -32
  110. package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +40 -7
  111. package/esm2022/tableview/api/editor/descriptors/editor-descriptor.factory.mjs +7 -73
  112. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +49 -134
  113. package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +14 -8
  114. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +11 -2
  115. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +3 -5
  116. package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +2 -18
  117. package/esm2022/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.mjs +51 -0
  118. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
  119. package/esm2022/tableview/api/editor/models/form-editor.event.mjs +1 -1
  120. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +1 -1
  121. package/esm2022/tableview/api/index.mjs +9 -9
  122. package/esm2022/tableview/api/tableview/data-providers/tableview-data-provider.factory.mjs +13 -51
  123. package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +19 -11
  124. package/esm2022/tableview/api/tableview/descriptors/tableview-descriptor.factory.mjs +19 -96
  125. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +29 -182
  126. package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +8 -6
  127. package/esm2022/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.mjs +4 -4
  128. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +154 -106
  129. package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +164 -7
  130. package/esm2022/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.mjs +2 -0
  131. package/esm2022/tableview/api/tableview/models/tableview-descriptor-helper.type.mjs +2 -0
  132. package/esm2022/tableview/api/tableview/models/tableview-input.model.mjs +1 -1
  133. package/esm2022/tableview/api/tableview/models/tableview-route.model.mjs +1 -1
  134. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +5 -8
  135. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +7 -5
  136. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +34 -23
  137. package/esm2022/tableview/editor/helpers/editor-field.mjs +3 -3
  138. package/esm2022/tableview/editor/helpers/editor-formly.mjs +4 -4
  139. package/esm2022/tableview/editor/helpers/field-create.mjs +21 -0
  140. package/esm2022/tableview/index.mjs +3 -2
  141. package/esm2022/tableview/provide.mjs +44 -1
  142. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +1 -1
  143. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +3 -1
  144. package/fesm2022/mediusinc-mng-commons-core.mjs +715 -792
  145. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  146. package/fesm2022/mediusinc-mng-commons-filter.mjs +10 -113
  147. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
  148. package/fesm2022/mediusinc-mng-commons-form-api.mjs +144 -203
  149. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  150. package/fesm2022/mediusinc-mng-commons-model-class.mjs +97 -0
  151. package/fesm2022/mediusinc-mng-commons-model-class.mjs.map +1 -0
  152. package/fesm2022/mediusinc-mng-commons-model.mjs +35 -144
  153. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  154. package/fesm2022/mediusinc-mng-commons-table-api-class.mjs +204 -0
  155. package/fesm2022/mediusinc-mng-commons-table-api-class.mjs.map +1 -0
  156. package/fesm2022/mediusinc-mng-commons-table-api.mjs +55 -319
  157. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  158. package/fesm2022/mediusinc-mng-commons-table.mjs +45 -38
  159. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  160. package/fesm2022/mediusinc-mng-commons-tableview-api-class.mjs +367 -0
  161. package/fesm2022/mediusinc-mng-commons-tableview-api-class.mjs.map +1 -0
  162. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +850 -1483
  163. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  164. package/fesm2022/mediusinc-mng-commons-tableview.mjs +421 -220
  165. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  166. package/filter/descriptors/filter-lookup.descriptor.d.ts +1 -26
  167. package/filter/descriptors/filter.descriptor.d.ts +5 -12
  168. package/form/api/data-providers/lookup-data-provider.factory.d.ts +17 -20
  169. package/form/api/data-providers/lookup.data-provider.d.ts +3 -3
  170. package/form/api/descriptors/action-button.descriptor.d.ts +11 -13
  171. package/form/api/descriptors/button-style.builder.d.ts +30 -44
  172. package/form/api/index.d.ts +1 -0
  173. package/form/api/models/button.model.d.ts +19 -0
  174. package/i18n/sl.json +56 -6
  175. package/model/class/README.md +8 -0
  176. package/model/class/data-providers/base-from-class-data-provider.factory.d.ts +3 -0
  177. package/model/class/descriptors/model-class.descriptor.d.ts +12 -0
  178. package/model/class/descriptors/type-class.descriptor.d.ts +3 -0
  179. package/model/{helpers → class/helpers}/model.d.ts +1 -2
  180. package/model/class/index.d.ts +4 -0
  181. package/model/data-providers/base-from-type-data-provider.factory.d.ts +13 -6
  182. package/model/descriptors/model.descriptor.d.ts +12 -27
  183. package/model/descriptors/type.descriptor.d.ts +0 -5
  184. package/model/helpers/i18n.d.ts +8 -3
  185. package/model/index.d.ts +0 -1
  186. package/package.json +25 -7
  187. package/table/api/class/README.md +10 -0
  188. package/table/api/{helpers/class-attribute-converter.d.ts → class/class-table-attribute-converter.d.ts} +2 -9
  189. package/table/api/{models → class}/class-table-attribute.model.d.ts +1 -1
  190. package/table/api/class/class-table-data-provider.factory.d.ts +4 -0
  191. package/table/api/{helpers/table-descriptor-helpers.d.ts → class/class-table-descriptor-helpers.d.ts} +2 -4
  192. package/table/api/class/class-table-descriptor.factory.d.ts +11 -0
  193. package/table/api/class/index.d.ts +5 -0
  194. package/table/api/data-providers/table-data-provider.factory.d.ts +17 -20
  195. package/table/api/data-providers/table.data-provider.d.ts +4 -12
  196. package/table/api/descriptors/column.descriptor.d.ts +5 -2
  197. package/table/api/descriptors/table-descriptor.factory.d.ts +3 -39
  198. package/table/api/descriptors/table.descriptor.d.ts +3 -3
  199. package/table/api/helpers/column-converter.d.ts +7 -0
  200. package/table/api/helpers/table-data-provider-descriptor-convert.d.ts +3 -3
  201. package/table/api/index.d.ts +1 -3
  202. package/table/api/models/table-columns.model.d.ts +2 -2
  203. package/table/components/column-value/column-value.component.d.ts +2 -0
  204. package/table/components/filter/filter-active-tag/filter-active-tag.component.d.ts +1 -1
  205. package/table/components/filter/filter-form/filter-form.component.d.ts +1 -1
  206. package/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.d.ts +1 -1
  207. package/table/components/table/table.component.d.ts +0 -10
  208. package/table/helpers/notification.d.ts +10 -1
  209. package/tableview/action/components/action/action.component.d.ts +10 -13
  210. package/tableview/action/components/editor/action-editor.component.d.ts +1 -1
  211. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +6 -5
  212. package/tableview/action/components/localization/data-language-dropdown.component.d.ts +3 -3
  213. package/tableview/action/components/table/action-table.component.d.ts +3 -3
  214. package/tableview/action/helpers/action-execution.d.ts +1 -1
  215. package/tableview/action/helpers/i18n.d.ts +36 -11
  216. package/tableview/action/helpers/notification.d.ts +37 -3
  217. package/tableview/action/models/execution/action-context.model.d.ts +3 -3
  218. package/tableview/action/models/execution/action-instance.model.d.ts +5 -5
  219. package/tableview/action/services/action-executor.service.d.ts +7 -7
  220. package/tableview/action/services/data-provider-executor.service.d.ts +16 -16
  221. package/tableview/action/services/view-container.service.d.ts +1 -1
  222. package/tableview/api/action/descriptors/action-descriptor.factory.d.ts +20 -31
  223. package/tableview/api/action/descriptors/action-editor-descriptor.factory.d.ts +18 -25
  224. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +39 -47
  225. package/tableview/api/action/descriptors/action-link-descriptor.factory.d.ts +21 -13
  226. package/tableview/api/action/descriptors/action-link.descriptor.d.ts +3 -3
  227. package/tableview/api/action/descriptors/action.descriptor.d.ts +49 -60
  228. package/tableview/api/action/descriptors/editor-action-descriptor.factory.d.ts +21 -0
  229. package/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.d.ts +21 -0
  230. package/tableview/api/action/descriptors/table-action-descriptor.factory.d.ts +36 -0
  231. package/tableview/api/action/descriptors/table-action-editor-descriptor.factory.d.ts +40 -0
  232. package/tableview/api/action/helpers/data-provider-executors.d.ts +13 -8
  233. package/tableview/api/action/models/action-confirmation.model.d.ts +14 -0
  234. package/tableview/api/action/models/action-descriptor.types.d.ts +6 -2
  235. package/tableview/api/action/models/action-error.model.d.ts +1 -1
  236. package/tableview/api/action/models/execution/action-context-validation.model.d.ts +2 -2
  237. package/tableview/api/action/models/execution/action-context.model.d.ts +2 -2
  238. package/tableview/api/action/models/execution/action-instance.model.d.ts +1 -1
  239. package/tableview/api/action/models/tableview-action-default-categories.model.d.ts +5 -5
  240. package/tableview/api/action/services/data-provider-executor.service.d.ts +26 -25
  241. package/tableview/api/class/README.md +13 -0
  242. package/tableview/api/{editor/helpers/class-attribute-converter.d.ts → class/editor/class-editor-attribute-converter.d.ts} +2 -2
  243. package/tableview/api/{editor/models/class-tableview-attribute.model.d.ts → class/editor/class-editor-attribute.model.d.ts} +1 -1
  244. package/tableview/api/class/editor/class-editor-data-provider.factory.d.ts +4 -0
  245. package/tableview/api/{editor/helpers/editor-descriptor-helpers.d.ts → class/editor/class-editor-descriptor-helpers.d.ts} +2 -5
  246. package/tableview/api/class/editor/class-editor-descriptor.factory.d.ts +11 -0
  247. package/tableview/api/class/index.d.ts +10 -0
  248. package/tableview/api/{tableview/helpers/class-attribute-converter.d.ts → class/tableview/class-tableview-attribute-converter.d.ts} +1 -1
  249. package/tableview/api/{tableview/models → class/tableview}/class-tableview-attribute.model.d.ts +2 -2
  250. package/tableview/api/class/tableview/class-tableview-data-provider.factory.d.ts +4 -0
  251. package/tableview/api/{tableview/helpers/tableview-descriptor-helpers.d.ts → class/tableview/class-tableview-descriptor-helpers.d.ts} +1 -2
  252. package/tableview/api/class/tableview/class-tableview-descriptor.factory.d.ts +12 -0
  253. package/tableview/api/editor/data-providers/editor-data-provider.factory.d.ts +17 -16
  254. package/tableview/api/editor/data-providers/editor.data-provider.d.ts +64 -29
  255. package/tableview/api/editor/descriptors/editor-descriptor.factory.d.ts +5 -38
  256. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +48 -112
  257. package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +5 -5
  258. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +8 -1
  259. package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +2 -3
  260. package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +3 -11
  261. package/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.d.ts +25 -0
  262. package/tableview/api/editor/models/editor-fields.model.d.ts +25 -21
  263. package/tableview/api/editor/models/form-editor.event.d.ts +0 -4
  264. package/tableview/api/index.d.ts +8 -7
  265. package/tableview/api/tableview/data-providers/tableview-data-provider.factory.d.ts +20 -25
  266. package/tableview/api/tableview/data-providers/tableview.data-provider.d.ts +22 -22
  267. package/tableview/api/tableview/descriptors/tableview-descriptor.factory.d.ts +20 -50
  268. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +69 -163
  269. package/tableview/api/tableview/helpers/tableview-create.d.ts +18 -5
  270. package/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.d.ts +2 -2
  271. package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +73 -20
  272. package/tableview/api/tableview/helpers/tableview-input-builder.d.ts +87 -9
  273. package/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.d.ts +9 -0
  274. package/tableview/api/tableview/models/tableview-descriptor-helper.type.d.ts +2 -0
  275. package/tableview/api/tableview/models/tableview-input.model.d.ts +1 -1
  276. package/tableview/api/tableview/models/tableview-route.model.d.ts +1 -1
  277. package/tableview/editor/helpers/field-create.d.ts +9 -0
  278. package/tableview/index.d.ts +2 -1
  279. package/tableview/provide.d.ts +7 -0
  280. package/tableview/tableview/components/route/tableview-route.component.d.ts +1 -1
  281. package/tableview/tableview/components/tableview/tableview.component.d.ts +6 -6
  282. package/version-info.json +6 -6
  283. package/core/components/pages/error/error.page.component.d.ts +0 -11
  284. package/core/components/pages/not-found/not-found.page.component.d.ts +0 -11
  285. package/core/data-providers/base-data-provider.factory.d.ts +0 -13
  286. package/esm2022/core/components/pages/error/error.page.component.mjs +0 -24
  287. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +0 -24
  288. package/esm2022/core/data-providers/base-data-provider.factory.mjs +0 -28
  289. package/esm2022/model/helpers/model.mjs +0 -71
  290. package/esm2022/table/api/helpers/class-attribute-converter.mjs +0 -104
  291. package/esm2022/table/api/helpers/table-descriptor-helpers.mjs +0 -98
  292. package/esm2022/table/api/models/class-table-attribute.model.mjs +0 -2
  293. package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +0 -88
  294. package/esm2022/tableview/api/editor/helpers/class-attribute-converter.mjs +0 -85
  295. package/esm2022/tableview/api/editor/helpers/editor-descriptor-helpers.mjs +0 -95
  296. package/esm2022/tableview/api/editor/models/class-tableview-attribute.model.mjs +0 -2
  297. package/esm2022/tableview/api/tableview/helpers/class-attribute-converter.mjs +0 -34
  298. package/esm2022/tableview/api/tableview/helpers/tableview-descriptor-helpers.mjs +0 -110
  299. package/esm2022/tableview/api/tableview/models/class-tableview-attribute.model.mjs +0 -2
  300. package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +0 -37
@@ -9,7 +9,7 @@ import { ZIndexUtils } from 'primeng/utils';
9
9
  import { NEVER, Subject, combineLatestWith, mergeMap, of, switchMap } from 'rxjs';
10
10
  import { take } from 'rxjs/operators';
11
11
  import { CommonsInternalError, CommonsService, LoggerService, effectWithDeps, objectDeepCopy } from '@mediusinc/mng-commons/core';
12
- import { ActionActivationTriggerEnum, ActionEditorSubmitDescriptorInst, ActionEditorSubmitTypeEnum, ActionInstanceStateEnum, ActionPositionEnum, ActionTypeEnum } from '@mediusinc/mng-commons/tableview/api';
12
+ import { ActionActivationTriggerEnum, ActionEditorSubmitDescriptorInst, ActionEditorSubmitTypeEnum, ActionInstanceStateEnum, ActionPositionEnum, ActionTypeEnum, TableviewActionDefaultCategories } from '@mediusinc/mng-commons/tableview/api';
13
13
  import { EditorAutoSaveStatusComponent } from '../../../../editor/components/editor/auto-save-status/auto-save-status.component';
14
14
  import { FormEditorComponent } from '../../../../editor/components/editor/form-editor.component';
15
15
  import { getI18nActionEditorTitleAsync } from '../../../helpers/i18n';
@@ -52,14 +52,19 @@ export class ActionEditorInjectorContextComponent {
52
52
  const actions = [];
53
53
  for (const action of this.editorAction().editorActions) {
54
54
  if (action instanceof ActionEditorSubmitDescriptorInst) {
55
- if (typeof action.button.icon === 'undefined') {
56
- action.button.withIcon(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'pi pi-check' : 'pi pi-times');
57
- }
58
- if (typeof action.button.label === 'undefined') {
59
- action.button.withLabel(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'general.save' : this.data().isDialog ? 'general.close' : 'general.cancel');
60
- }
55
+ action.withButtonOpts({
56
+ ...action.button,
57
+ icon: action.button?.icon === undefined ? (action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'pi pi-check' : 'pi pi-times') : action.button.icon,
58
+ label: action.button?.label === undefined
59
+ ? action.submitType === ActionEditorSubmitTypeEnum.Submit
60
+ ? 'general.save'
61
+ : this.data().isDialog
62
+ ? 'general.close'
63
+ : 'general.cancel'
64
+ : action.button.label
65
+ });
61
66
  // assign run operations
62
- action.withRunNotificationSuccess(undefined, undefined, false);
67
+ action.withNotifications(false);
63
68
  if (action.submitType === ActionEditorSubmitTypeEnum.Submit) {
64
69
  action.withRunFunction(() => {
65
70
  this.triggerSubmit();
@@ -131,14 +136,14 @@ export class ActionEditorInjectorContextComponent {
131
136
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
132
137
  this.#viewContainerEditorResetSubscription = this.viewContainer
133
138
  ? toObservable(this.editorAction)
134
- .pipe(switchMap(a => (a.isTableviewMainEditor ? (this.viewContainer?.editorReset$ ?? NEVER) : NEVER)), takeUntilDestroyed())
139
+ .pipe(switchMap(a => (this.isActionMainTwEditor(a) ? (this.viewContainer?.editorReset$ ?? NEVER) : NEVER)), takeUntilDestroyed())
135
140
  .subscribe({
136
141
  next: e => this.onEditorReset(e)
137
142
  })
138
143
  : undefined;
139
144
  this.#viewContainerEditorCloseSubscription = this.viewContainer
140
145
  ? toObservable(this.editorAction)
141
- .pipe(switchMap(a => (a.isTableviewMainEditor ? (this.viewContainer?.editorClose$ ?? NEVER) : NEVER)), takeUntilDestroyed())
146
+ .pipe(switchMap(a => (this.isActionMainTwEditor(a) ? (this.viewContainer?.editorClose$ ?? NEVER) : NEVER)), takeUntilDestroyed())
142
147
  .subscribe({
143
148
  next: () => this.cancel()
144
149
  })
@@ -150,7 +155,7 @@ export class ActionEditorInjectorContextComponent {
150
155
  });
151
156
  this.#viewContainerDataProviderEditorResetSubscription = this.viewContainer
152
157
  ? toObservable(this.viewContainer.dataProvider)
153
- .pipe(combineLatestWith(toObservable(this.editorAction)), switchMap(([dataProvider, action]) => action.isTableviewMainEditor && action.dataProvider == null ? (dataProvider?.editorReset$ ?? NEVER) : NEVER), takeUntilDestroyed())
158
+ .pipe(combineLatestWith(toObservable(this.editorAction)), switchMap(([dataProvider, action]) => this.isActionMainTwEditor(action) && action.dataProvider == null ? (dataProvider?.editorReset$ ?? NEVER) : NEVER), takeUntilDestroyed())
154
159
  .subscribe({
155
160
  next: e => this.onEditorReset(e)
156
161
  })
@@ -196,7 +201,7 @@ export class ActionEditorInjectorContextComponent {
196
201
  this.submitExecutionSubscription = context.execution$.pipe(take(1)).subscribe({
197
202
  next: res => {
198
203
  this.lastSubmitItem = event.formItem;
199
- const modelIdProp = this.editorAction().model?.idProperty;
204
+ const modelIdProp = this.editorAction().editorDescriptor.model?.idProperty;
200
205
  if (res && typeof res === 'object' && !this.itemId() && modelIdProp) {
201
206
  // to cover creation!
202
207
  this.updateItemId(res[modelIdProp]);
@@ -341,6 +346,10 @@ export class ActionEditorInjectorContextComponent {
341
346
  this.instanceStateSubscription?.unsubscribe();
342
347
  this.instanceReactivationSubscription?.unsubscribe();
343
348
  }
349
+ isActionMainTwEditor(action) {
350
+ return (action.tableviewCategory != null &&
351
+ [TableviewActionDefaultCategories.DETAILS, TableviewActionDefaultCategories.EDIT, TableviewActionDefaultCategories.ADD].includes(action.tableviewCategory));
352
+ }
344
353
  beforeWindowUnload() {
345
354
  if (this.data().isDialog && this.formEditorCmp()?.form.pristine === false) {
346
355
  return confirm(this.translate.instant('mngEditor.unsavedChangesConfirmation.message'));
@@ -416,4 +425,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
416
425
  type: HostListener,
417
426
  args: ['window:keydown.Escape']
418
427
  }] } });
419
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFDLGFBQWEsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsS0FBSyxFQUFjLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFD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ZSxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSw2QkFBNkIsQ0FBQyxtQkFDbkcsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLHFCQUFxQixFQUFFLENBQUM7OEJBb1k1QixrQkFBa0I7c0JBRHpCLFlBQVk7dUJBQUMscUJBQXFCO2dCQVMzQixlQUFlO3NCQUR0QixZQUFZO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtQcm9ncmVzc1NwaW5uZXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcbmltcG9ydCB7VG9vbGJhck1vZHVsZX0gZnJvbSAncHJpbWVuZy90b29sYmFyJztcbmltcG9ydCB7WkluZGV4VXRpbHN9IGZyb20gJ3ByaW1lbmcvdXRpbHMnO1xuaW1wb3J0IHtORVZFUiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0V2l0aCwgbWVyZ2VNYXAsIG9mLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgQWN0aW9uRGF0YSxcbiAgICBBY3Rpb25QYXJhbWV0ZXJzLFxuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIENvbW1vbnNTZXJ2aWNlLFxuICAgIElEYXRhUHJvdmlkZXIsXG4gICAgSWRUeXBlLFxuICAgIExvZ2dlclNlcnZpY2UsXG4gICAgZWZmZWN0V2l0aERlcHMsXG4gICAgb2JqZWN0RGVlcENvcHlcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7XG4gICAgQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLFxuICAgIEFjdGlvbkRlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLFxuICAgIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLFxuICAgIEFjdGlvblBvc2l0aW9uRW51bSxcbiAgICBBY3Rpb25UeXBlRW51bSxcbiAgICBFZGl0b3JSZXNldEV2ZW50LFxuICAgIEZvcm1FZGl0b3JTdWJtaXRFdmVudCxcbiAgICBJQWN0aW9uRWRpdG9yQ29tcG9uZW50LFxuICAgIElBY3Rpb25JbnN0YW5jZSxcbiAgICBJRWRpdG9yRGF0YVByb3ZpZGVyXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmltcG9ydCB7RWRpdG9yQXV0b1NhdmVTdGF0dXNDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uL2VkaXRvci9jb21wb25lbnRzL2VkaXRvci9hdXRvLXNhdmUtc3RhdHVzL2F1dG8tc2F2ZS1zdGF0dXMuY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybUVkaXRvckNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vZWRpdG9yL2NvbXBvbmVudHMvZWRpdG9yL2Zvcm0tZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQge0VkaXRvckF1dG9TYXZlU3RhdHVzfSBmcm9tICcuLi8uLi8uLi8uLi9lZGl0b3IvbW9kZWxzL2VkaXRvci1hdXRvLXNhdmUtcHJldmlldy5tb2RlbCc7XG5pbXBvcnQge2dldEkxOG5BY3Rpb25FZGl0b3JUaXRsZUFzeW5jfSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL2kxOG4nO1xuaW1wb3J0IHtBY3Rpb25JbnN0YW5jZX0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24taW5zdGFuY2UubW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25FeGVjdXRvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlJztcbmltcG9ydCB7cHJvdmlkZUFjdGlvbkV4ZWN1dG9yfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcm92aWRlcnMvcHJvdmlkZS1hY3Rpb24tZXhlY3V0b3InO1xuaW1wb3J0IHtWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy92aWV3LWNvbnRhaW5lci5zZXJ2aWNlJztcbmltcG9ydCB7QWN0aW9uQ29tcG9uZW50fSBmcm9tICcuLi8uLi9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW0FjdGlvbkNvbXBvbmVudCwgUHJvZ3Jlc3NTcGlubmVyTW9kdWxlLCBGb3JtRWRpdG9yQ29tcG9uZW50LCBUb29sYmFyTW9kdWxlLCBFZGl0b3JBdXRvU2F2ZVN0YXR1c0NvbXBvbmVudF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbcHJvdmlkZUFjdGlvbkV4ZWN1dG9yKCldXG59KVxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckluamVjdG9yQ29udGV4dENvbXBvbmVudDxJdGVtID0gYW55LCBTZXJ2aWNlID0gYW55PiBpbXBsZW1lbnRzIE9uRGVzdHJveSwgSUFjdGlvbkVkaXRvckNvbXBvbmVudCB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA9IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRDb21wb25lbnQnKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1vbnNTZXJ2aWNlID0gaW5qZWN0KENvbW1vbnNTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbkV4ZWN1dG9yID0gaW5qZWN0KEFjdGlvbkV4ZWN1dG9yU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyID0gaW5qZWN0KFZpZXdDb250YWluZXIsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gICAgLy8gbWV0YWRhdGEgYW5kIGVkaXRvciBtb2RlIGlucHV0XG4gICAgZGF0YSA9IGlucHV0LnJlcXVpcmVkPEFjdGlvbkVkaXRvckluamVjdG9yQ29udGV4dElucHV0RGF0YTxJdGVtLCBTZXJ2aWNlPj4oKTtcblxuICAgIHB1YmxpYyBhY3Rpb25SdW4gPSBvdXRwdXQ8SXRlbSB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG4gICAgcHVibGljIGFjdGlvbkNhbmNlbCA9IG91dHB1dDxJdGVtIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIHB1YmxpYyBmb3JtRWRpdG9yQ21wID0gdmlld0NoaWxkKEZvcm1FZGl0b3JDb21wb25lbnQpO1xuXG4gICAgcHJpdmF0ZSBoYXNUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZWRpdG9yQWN0aW9uKCkuZWRpdG9yVGl0bGUgIT09IG51bGwpO1xuICAgIHB1YmxpYyB0aXRsZSA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIGlzRm9ybURpc2FibGVkID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8vIGRhdGFcbiAgICBwdWJsaWMgaXRlbSA9IHNpZ25hbDxJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBpdGVtSWQgPSBzaWduYWw8SWRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBhY3Rpb25EYXRhID0gc2lnbmFsPEFjdGlvbkRhdGEgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIGVkaXRvckFjdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGF0YSgpLmRlc2NyaXB0b3IpO1xuXG4gICAgLy8gYWN0aW9uc1xuICAgIHByaXZhdGUgYWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uczogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbT5bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckFjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmJ1dHRvbi5pY29uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYnV0dG9uLndpdGhJY29uKGFjdGlvbi5zdWJtaXRUeXBlID09PSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQgPyAncGkgcGktY2hlY2snIDogJ3BpIHBpLXRpbWVzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmJ1dHRvbi5sYWJlbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmJ1dHRvbi53aXRoTGFiZWwoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCA/ICdnZW5lcmFsLnNhdmUnIDogdGhpcy5kYXRhKCkuaXNEaWFsb2cgPyAnZ2VuZXJhbC5jbG9zZScgOiAnZ2VuZXJhbC5jYW5jZWwnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhc3NpZ24gcnVuIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3ModW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bkZ1bmN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclN1Ym1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bkZ1bmN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLnZpZXdDb250YWluZXI/LmFjdGlvbnMoKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUucG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzPy5pbmNsdWRlcyh0aGlzLmVkaXRvckFjdGlvbigpLnRhYmxldmlld0NhdGVnb3J5ISkpID8/IFtdKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgIH0pO1xuICAgIHB1YmxpYyB0b29sYmFyTGVmdEFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFjdGlvbnMoKS5maWx0ZXIoYSA9PiBhLnBvc2l0aW9uID09PSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQpKTtcbiAgICBwdWJsaWMgdG9vbGJhclJpZ2h0QWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMuYWN0aW9ucygpXG4gICAgICAgICAgICAuZmlsdGVyKGEgPT4gYS5wb3NpdGlvbiA9PT0gQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodClcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICApO1xuICAgIHB1YmxpYyBmb290ZXJMZWZ0QWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWN0aW9ucygpLmZpbHRlcihhID0+IGEucG9zaXRpb24gPT09IEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJMZWZ0KSk7XG4gICAgcHVibGljIGZvb3RlclJpZ2h0QWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMuYWN0aW9ucygpXG4gICAgICAgICAgICAuZmlsdGVyKGEgPT4gYS5wb3NpdGlvbiA9PT0gQWN0aW9uUG9zaXRpb25FbnVtLkZvb3RlclJpZ2h0KVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICk7XG5cbiAgICBwcml2YXRlIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT47XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgaW5zdGFuY2VSZWFjdGl2YXRpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBwdWJsaWMgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHJpdmF0ZSBmZXRjaEV4ZWN1dGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgZm9ybVZhbHVlID0gc2lnbmFsPEl0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIHN1Ym1pdExvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICAgIHB1YmxpYyBhdXRvU2F2ZVN0YXR1cyA9IHNpZ25hbDxFZGl0b3JBdXRvU2F2ZVN0YXR1cyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwcml2YXRlIHN1Ym1pdEV4ZWN1dGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGxhc3RTdWJtaXRJdGVtPzogSXRlbTtcblxuICAgIC8vIHN1YnNjcmlwdGlvbnMgYW5kIGVmZmVjdHNcbiAgICAjdGl0bGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICNkYXRhRWZmZWN0ID0gZWZmZWN0V2l0aERlcHMoXG4gICAgICAgIFt0aGlzLmRhdGFdLFxuICAgICAgICAoW2RhdGFdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW0uc2V0KGRhdGEuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1JZC5zZXQoZGF0YS5pdGVtSWQpO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25EYXRhLnNldChkYXRhLmFjdGlvbkRhdGEpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5hY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbkluc3RhbmNlKGRhdGEuYWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBub3RpZnkgZXhlY3V0b3IgdG8gZm9yIGFjdGl2YXRpb24gdG8gZW5kXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NBY3Rpb25JbnN0YW5jZSh0aGlzLmFjdGlvbkV4ZWN1dG9yLm9uQWN0aW9uRWRpdG9ySW5pdCh0aGlzLmVkaXRvckFjdGlvbigpLCB0aGlzLmluc3RhbmNlLCB0aGlzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtmaXJzdE9ubHk6IHRydWV9XG4gICAgKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI2hhc1RpdGxlRWZmZWN0ID0gZWZmZWN0V2l0aERlcHMoW3RoaXMuaGFzVGl0bGVdLCAoW2hhc1RpdGxlXSkgPT4ge1xuICAgICAgICBpZiAoIWhhc1RpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlLnNldCh1bmRlZmluZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jdGl0bGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLiN0aXRsZVN1YnNjcmlwdGlvbiA9IGdldEkxOG5BY3Rpb25FZGl0b3JUaXRsZUFzeW5jKHRoaXMudHJhbnNsYXRlLCB0aGlzLmVkaXRvckFjdGlvbigpLCB0aGlzLml0ZW0oKSkuc3Vic2NyaWJlKHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGl0bGUuc2V0KHQgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICN0aXRsZVVwZGF0ZVN1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLmhhc1RpdGxlKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbiksIHRvT2JzZXJ2YWJsZSh0aGlzLml0ZW0pKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKChbaGFzVGl0bGUsIGVkaXRvckFjdGlvbiwgaXRlbV0pID0+IChoYXNUaXRsZSA/IGdldEkxOG5BY3Rpb25FZGl0b3JUaXRsZUFzeW5jKHRoaXMudHJhbnNsYXRlLCBlZGl0b3JBY3Rpb24sIGl0ZW0pIDogb2YodW5kZWZpbmVkKSkpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHRpdGxlID0+IHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUuc2V0KHRpdGxlID8/IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGFEaWFsb2dDb25maWcgPSB0aGlzLmRhdGEoKS5kaWFsb2dDb25maWc7XG4gICAgICAgICAgICBpZiAoZGF0YURpYWxvZ0NvbmZpZykge1xuICAgICAgICAgICAgICAgIGRhdGFEaWFsb2dDb25maWcuaGVhZGVyID0gdGl0bGUgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25zU2VydmljZS5zZXRQYWdlVGl0bGUodGl0bGUgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICN2aWV3Q29udGFpbmVyRWRpdG9yUmVzZXRTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJcbiAgICAgICAgPyB0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKGEgPT4gKGEuaXNUYWJsZXZpZXdNYWluRWRpdG9yID8gKHRoaXMudmlld0NvbnRhaW5lcj8uZWRpdG9yUmVzZXQkID8/IE5FVkVSKSA6IE5FVkVSKSksXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgbmV4dDogZSA9PiB0aGlzLm9uRWRpdG9yUmVzZXQoZSlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgI3ZpZXdDb250YWluZXJFZGl0b3JDbG9zZVN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0NvbnRhaW5lclxuICAgICAgICA/IHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbilcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoYSA9PiAoYS5pc1RhYmxldmlld01haW5FZGl0b3IgPyAodGhpcy52aWV3Q29udGFpbmVyPy5lZGl0b3JDbG9zZSQgPz8gTkVWRVIpIDogTkVWRVIpKSxcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICNkYXRhUHJvdmlkZXJFZGl0b3JSZXNldFN1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoYWN0aW9uID0+IChhY3Rpb24uZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXIgfCB1bmRlZmluZWQpPy5lZGl0b3JSZXNldCQgPz8gTkVWRVIpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGUgPT4gdGhpcy5vbkVkaXRvclJlc2V0KGUpXG4gICAgICAgIH0pO1xuICAgICN2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyRWRpdG9yUmVzZXRTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJcbiAgICAgICAgPyB0b09ic2VydmFibGUodGhpcy52aWV3Q29udGFpbmVyLmRhdGFQcm92aWRlcilcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pKSxcbiAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoW2RhdGFQcm92aWRlciwgYWN0aW9uXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaXNUYWJsZXZpZXdNYWluRWRpdG9yICYmIGFjdGlvbi5kYXRhUHJvdmlkZXIgPT0gbnVsbCA/ICgoZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXIgfCB1bmRlZmluZWQpPy5lZGl0b3JSZXNldCQgPz8gTkVWRVIpIDogTkVWRVJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgbmV4dDogZSA9PiB0aGlzLm9uRWRpdG9yUmVzZXQoZSlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuI3RpdGxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmZldGNoRXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1Ym1pdEV4ZWN1dGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlO1xuICAgICAgICB0aGlzLnVuc2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5vbkFjdGlvbkVkaXRvckRlc3Ryb3koaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN1Ym1pdChldmVudDogRm9ybUVkaXRvclN1Ym1pdEV2ZW50PEl0ZW0+KSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBBY3Rpb24gaXMgbm90IGluc3RhbnRpYXRlZCBpbiBhY3Rpb24gZWRpdG9yIGZvciBhY3Rpb24gJHt0aGlzLmVkaXRvckFjdGlvbigpLmFjdGlvbk5hbWV9LmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAvLyBwcmVwYXJlIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4gPSB7XG4gICAgICAgICAgICAgICAgaXRlbUlkOiB0aGlzLml0ZW1JZCgpLFxuICAgICAgICAgICAgICAgIGl0ZW06IGV2ZW50LmZvcm1JdGVtLFxuICAgICAgICAgICAgICAgIGFjdGlvbkRhdGE6IHRoaXMuYWN0aW9uRGF0YSgpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvci5pc0xvY2FsaXplZCkge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMubG9jYWxlID0gdGhpcy5jb21tb25zU2VydmljZS5nZXREZWZhdWx0TG9jYWxlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yU3VibWl0KFxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yQWN0aW9uKCksXG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEoKS5kYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEoKS5wcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdEV4ZWN1dGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uID0gY29udGV4dC5leGVjdXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTdWJtaXRJdGVtID0gZXZlbnQuZm9ybUl0ZW07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsSWRQcm9wID0gdGhpcy5lZGl0b3JBY3Rpb24oKS5tb2RlbD8uaWRQcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhdGhpcy5pdGVtSWQoKSAmJiBtb2RlbElkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gY292ZXIgY3JlYXRpb24hXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1JZChyZXNbbW9kZWxJZFByb3AgYXMga2V5b2Ygb2JqZWN0XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25SdW4uZW1pdChyZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLnJ1bihjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjYW5jZWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgQWN0aW9uIGVkaXRvciBjYW5ub3QgYmUgY2FuY2VsZWQgZm9yICR7dGhpcy5lZGl0b3JBY3Rpb24oKS5hY3Rpb25OYW1lfSwgYmVjYXVzZSBubyBhY3Rpb24gaW5zdGFuY2UgaXMgcHJlc2VudGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aW9uQ2FuY2VsLmVtaXQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5maW5pc2hBY3Rpb24odGhpcy5pbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUl0ZW1JZChpdGVtSWQ6IElkVHlwZSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLml0ZW1JZC5zZXQoaXRlbUlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlSXRlbShpdGVtOiBJdGVtIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaXRlbS5zZXQoaXRlbSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJTdWJtaXQoKSB7XG4gICAgICAgIHRoaXMuZm9ybUVkaXRvckNtcCgpPy5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25WYWx1ZUNoYW5nZSh2YWx1ZTogSXRlbSkge1xuICAgICAgICB0aGlzLmZvcm1WYWx1ZS5zZXQodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkF1dG9TYXZlKHZhbHVlOiBFZGl0b3JBdXRvU2F2ZVN0YXR1cykge1xuICAgICAgICB0aGlzLmF1dG9TYXZlU3RhdHVzLnNldCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmZXRjaEl0ZW0oKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBBY3Rpb24gaXMgbm90IGluc3RhbnRpYXRlZCBpbiBhY3Rpb24gZWRpdG9yIGZvciBhY3Rpb24gJHt0aGlzLmVkaXRvckFjdGlvbigpLmFjdGlvbk5hbWV9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPiA9IHtcbiAgICAgICAgICAgIGl0ZW1JZDogdGhpcy5pdGVtSWQoKSxcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuaXRlbSgpLFxuICAgICAgICAgICAgYWN0aW9uRGF0YTogdGhpcy5hY3Rpb25EYXRhKClcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvci5pc0xvY2FsaXplZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMubG9jYWxlID0gdGhpcy5jb21tb25zU2VydmljZS5hcHBEYXRhTG9jYWxlKCkhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLmxvY2FsZSA9IHRoaXMuY29tbW9uc1NlcnZpY2UuZ2V0RGVmYXVsdExvY2FsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5wcmV2aW91c0luc3RhbmNlIGluc3RhbmNlb2YgQWN0aW9uSW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZS5wcmV2aW91c0luc3RhbmNlLmNvbnRleHQ/LnBhcmFtZXRlcnMuaXRlbSkge1xuICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy5mb3JtSXRlbSA9IHRoaXMuaW5zdGFuY2UucHJldmlvdXNJbnN0YW5jZS5jb250ZXh0LnBhcmFtZXRlcnMuaXRlbTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdGFuY2U/LnByZXZpb3VzSW5zdGFuY2U/LnJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMuc3VibWl0UmVzdWx0ID0gdGhpcy5pbnN0YW5jZT8ucHJldmlvdXNJbnN0YW5jZT8ucmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUNvbnRleHRGb3JFZGl0b3JGZXRjaChcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yQWN0aW9uKCksXG4gICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLFxuICAgICAgICAgICAgdGhpcy5kYXRhKCkuZGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSxcbiAgICAgICAgICAgIHRoaXMuZGF0YSgpLnByZXZpb3VzQWN0aW9uSW5zdGFuY2VcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5mZXRjaEV4ZWN1dGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5mZXRjaEV4ZWN1dGlvblN1YnNjcmlwdGlvbiA9IGNvbnRleHQuZXhlY3V0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtKHJlcyA/PyB1bmRlZmluZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLnJ1bihjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEVkaXRvckVuYWJsZWQoaXNFbmFibGVkID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmlzRm9ybURpc2FibGVkLnNldCghaXNFbmFibGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NBY3Rpb25JbnN0YW5jZShpbnN0YW5jZTogSUFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+KSB7XG4gICAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQWN0aW9uSW5zdGFuY2UpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJ1Vua25vd24gdHlwZSBvZiBhY3Rpb24gaW5zdGFuY2UgcmVjZWl2ZWQnLCB7ZGV0YWlsczogaW5zdGFuY2V9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UgfHwgdGhpcy5pbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lICE9PSBpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy5pbnN0YW5jZS5zdGF0ZSQuc3Vic2NyaWJlKHMgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocykge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoSXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hTdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1blN0YXJ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FbmQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRXJyb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLk5leHRBY3Rpb25TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5uZXh0QWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvbkVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5uZXh0QWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkVycm9yQWN0aW9uU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8uZXJyb3JBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5FcnJvckFjdGlvbkVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5lcnJvckFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hFcnJvckZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hEaXNtaXNzZWRGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBjb3B5IG9mIGl0ZW0gYW5kIHVwZGF0ZSB0aXRsZSB0byBiZSBvbiB0aGUgbGF0ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW0ob2JqZWN0RGVlcENvcHkodGhpcy5sYXN0U3VibWl0SXRlbSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGFsc28gdW5zZXRJbnN0YW5jZSwgYnV0IGxldCB0aGlzIGZvciByZWFjdGl2YXRpb25JbnN0YW5jZSQgbGlzdGVuZXIgdG8gbm90IGludGVyZmVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VSZWFjdGl2YXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLmluc3RhbmNlLnJlYWN0aXZhdGlvbkluc3RhbmNlJC5zdWJzY3JpYmUobmV3SW5zdGFuY2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbkluc3RhbmNlKG5ld0luc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnNldEluc3RhbmNlKCkge1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmluc3RhbmNlU3RhdGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VSZWFjdGl2YXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcpXG4gICAgcHJpdmF0ZSBiZWZvcmVXaW5kb3dVbmxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEoKS5pc0RpYWxvZyAmJiB0aGlzLmZvcm1FZGl0b3JDbXAoKT8uZm9ybS5wcmlzdGluZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maXJtKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ21uZ0VkaXRvci51bnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbi5tZXNzYWdlJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duLkVzY2FwZScpXG4gICAgcHJpdmF0ZSBvbkVzY2FwZVByZXNzZWQoKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZGF0YSgpLmlzRGlhbG9nICYmXG4gICAgICAgICAgICB0aGlzLmVkaXRvckFjdGlvbigpLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSAmJlxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvbkRpYWxvZ1JlZiAmJlxuICAgICAgICAgICAgcGFyc2VJbnQodGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5nZXQodGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvbkRpYWxvZ1JlZik/Lmluc3RhbmNlLmNvbnRhaW5lcj8uc3R5bGUuekluZGV4ID8/ICcnKSA9PT0gWkluZGV4VXRpbHMuZ2V0Q3VycmVudCgpXG4gICAgICAgIClcbiAgICAgICAgICAgIHRoaXMuY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oY2FsbEZyb21HdWFyZCA9IGZhbHNlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1FZGl0b3JDbXAoKT8uZm9ybS5wcmlzdGluZSA9PT0gZmFsc2UgJiYgdGhpcy5lZGl0b3JBY3Rpb24oKS51bnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1Vuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uRGlhbG9nKGNhbGxGcm9tR3VhcmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFjYWxsRnJvbUd1YXJkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbkRpYWxvZyhjYWxsRnJvbUd1YXJkOiBib29sZWFuKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ21uZ0VkaXRvci51bnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbi5oZWFkZXInKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ21uZ0VkaXRvci51bnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbi5tZXNzYWdlJyksXG4gICAgICAgICAgICBhY2NlcHRMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZ2VuZXJhbC55ZXMnKSxcbiAgICAgICAgICAgIHJlamVjdExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdnZW5lcmFsLm5vJyksXG4gICAgICAgICAgICBpY29uOiAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjYWxsRnJvbUd1YXJkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRWRpdG9yUmVzZXQoZXZlbnQ/OiBFZGl0b3JSZXNldEV2ZW50PEl0ZW0+KSB7XG4gICAgICAgIGlmIChldmVudD8uZmV0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hJdGVtKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQ/Lml0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUVkaXRvckNtcCgpPy5yZXNldEZvcm1Nb2RlbChldmVudC5pdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudD8uZmllbGRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudC5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1FZGl0b3JDbXAoKT8ucmVzZXRGaWVsZFZhbHVlKGtleSwgZXZlbnQuZmllbGRzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtRWRpdG9yQ21wKCk/LnJlc2V0Rm9ybU1vZGVsKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRWRpdG9ySW5qZWN0b3JDb250ZXh0SW5wdXREYXRhPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICBkZXNjcmlwdG9yOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtLCBTZXJ2aWNlPjtcbiAgICBpc0RpYWxvZzogYm9vbGVhbjtcbiAgICBkaWFsb2dDb25maWc/OiBEeW5hbWljRGlhbG9nQ29uZmlnO1xuICAgIGl0ZW1JZD86IElkVHlwZTtcbiAgICBpdGVtPzogSXRlbTtcbiAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YTtcbiAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+O1xuICAgIGFjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT47XG4gICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxhbnksIGFueT47XG59XG4iLCJAaWYgKCFkYXRhKCkuaXNEaWFsb2cgJiYgdGl0bGUoKSkge1xuICAgIDxoNT57eyB0aXRsZSgpIH19PC9oNT5cbn1cbkBpZiAoZGF0YSgpLmlzRGlhbG9nICYmIGVkaXRvckFjdGlvbigpLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgIDxzcGFuIGNsYXNzPVwicC1kaWFsb2ctaGVhZGVyIGRpYWxvZy1jbG9zZS1idXR0b24td3JhcHBlclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInAtZGlhbG9nLWhlYWRlci1pY29uIHAtZGlhbG9nLWhlYWRlci1tYXhpbWl6ZSBwLWxpbmtcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZGlhbG9nLWhlYWRlci1jbG9zZS1pY29uIHBpIHBpLXRpbWVzXCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L3NwYW4+XG59XG48ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggZmxleC1jb2x1bW5cIj5cbiAgICBAaWYgKHRvb2xiYXJMZWZ0QWN0aW9ucygpLmxlbmd0aCA+IDAgfHwgdG9vbGJhclJpZ2h0QWN0aW9ucygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG1uZy1hY3Rpb24tZWRpdG9yLXRvb2xiYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJtbmctYWN0aW9uLWVkaXRvci10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIHRvb2xiYXJMZWZ0QWN0aW9ucygpOyB0cmFjayBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZygpIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cImZvcm1WYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZCgpXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIHRvb2xiYXJSaWdodEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmcoKSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWQoKVwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtdG9vbGJhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG1uZy1hY3Rpb24tZWRpdG9yLWZvcm0tY29udGFpbmVyXCI+XG4gICAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgW3N0eWxlXT1cInt3aWR0aDogJzNyZW0nLCBoZWlnaHQ6ICczcmVtJ31cIiBzdHJva2VXaWR0aD1cIjNcIj48L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChlZGl0b3JBY3Rpb24oKS5lZGl0b3JEZXNjcmlwdG9yICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgIDxtbmctZm9ybS1lZGl0b3JcbiAgICAgICAgICAgICAgICBbZGVzY3JpcHRvcl09XCJlZGl0b3JBY3Rpb24oKS5lZGl0b3JEZXNjcmlwdG9yXCJcbiAgICAgICAgICAgICAgICBbZWRpdG9ySWRdPVwiZWRpdG9yQWN0aW9uKCkuYWN0aW9uTmFtZUxvbmdcIlxuICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW0oKVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWQoKVwiXG4gICAgICAgICAgICAgICAgW2lzRm9ybURpc2FibGVkXT1cImlzRm9ybURpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgIHNob3dBdXRvU2F2ZVN0YXR1cz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZm9ybVN1Ym1pdCk9XCJvblN1Ym1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoYXV0b1NhdmVTdGF0dXMpPVwib25BdXRvU2F2ZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1uZy1hY3Rpb24tZWRpdG9yLWZvb3Rlci1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBmb290ZXJMZWZ0QWN0aW9ucygpOyB0cmFjayBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmcoKSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cImZvcm1WYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWQoKVwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvci5hdXRvU2F2ZSkge1xuICAgICAgICAgICAgICAgIDxtbmctZWRpdG9yLWF1dG8tc2F2ZS1zdGF0dXMgW3N0YXR1c109XCJhdXRvU2F2ZVN0YXR1cygpXCI+PC9tbmctZWRpdG9yLWF1dG8tc2F2ZS1zdGF0dXM+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGZvb3RlclJpZ2h0QWN0aW9ucygpOyB0cmFjayBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmcoKSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cImZvcm1WYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWQoKVwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
428
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFDLGFBQWEsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUMsS0FBSyxFQUFjLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFD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LENBQUM7WUFDbEUsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQzNDLENBQUM7SUFDTCxDQUFDOytHQWhkUSxvQ0FBb0M7bUdBQXBDLG9DQUFvQywwWUFGbEMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLHlFQXFCSCxtQkFBbUIsZ0VDOUV4RCxrd0lBNEZBLHdLRHJDYyxlQUFlLG1PQUFFLHFCQUFxQix5TUFBRSxtQkFBbUIsa1BBQUUsYUFBYSx5UEFBRSw2QkFBNkI7OzRGQUkxRyxvQ0FBb0M7a0JBVGhELFNBQVM7aUNBQ00sSUFBSSxZQUNOLG9DQUFvQyxXQUdyQyxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsNkJBQTZCLENBQUMsbUJBQ25HLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDOzhCQWlaNUIsa0JBQWtCO3NCQUR6QixZQUFZO3VCQUFDLHFCQUFxQjtnQkFTM0IsZUFBZTtzQkFEdEIsWUFBWTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZ30gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7UHJvZ3Jlc3NTcGlubmVyTW9kdWxlfSBmcm9tICdwcmltZW5nL3Byb2dyZXNzc3Bpbm5lcic7XG5pbXBvcnQge1Rvb2xiYXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbGJhcic7XG5pbXBvcnQge1pJbmRleFV0aWxzfSBmcm9tICdwcmltZW5nL3V0aWxzJztcbmltcG9ydCB7TkVWRVIsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdFdpdGgsIG1lcmdlTWFwLCBvZiwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIEFjdGlvbkRhdGEsXG4gICAgQWN0aW9uUGFyYW1ldGVycyxcbiAgICBDb21tb25zSW50ZXJuYWxFcnJvcixcbiAgICBDb21tb25zU2VydmljZSxcbiAgICBJRGF0YVByb3ZpZGVyLFxuICAgIElkVHlwZSxcbiAgICBMb2dnZXJTZXJ2aWNlLFxuICAgIGVmZmVjdFdpdGhEZXBzLFxuICAgIG9iamVjdERlZXBDb3B5XG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1xuICAgIEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSxcbiAgICBBY3Rpb25EZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bSxcbiAgICBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bSxcbiAgICBBY3Rpb25Qb3NpdGlvbkVudW0sXG4gICAgQWN0aW9uVHlwZUVudW0sXG4gICAgRWRpdG9yUmVzZXRFdmVudCxcbiAgICBGb3JtRWRpdG9yU3VibWl0RXZlbnQsXG4gICAgSUFjdGlvbkVkaXRvckNvbXBvbmVudCxcbiAgICBJQWN0aW9uSW5zdGFuY2UsXG4gICAgSUVkaXRvckRhdGFQcm92aWRlcixcbiAgICBUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllc1xufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge0VkaXRvckF1dG9TYXZlU3RhdHVzQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi8uLi9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvYXV0by1zYXZlLXN0YXR1cy9hdXRvLXNhdmUtc3RhdHVzLmNvbXBvbmVudCc7XG5pbXBvcnQge0Zvcm1FZGl0b3JDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uL2VkaXRvci9jb21wb25lbnRzL2VkaXRvci9mb3JtLWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHtFZGl0b3JBdXRvU2F2ZVN0YXR1c30gZnJvbSAnLi4vLi4vLi4vLi4vZWRpdG9yL21vZGVscy9lZGl0b3ItYXV0by1zYXZlLXByZXZpZXcubW9kZWwnO1xuaW1wb3J0IHtnZXRJMThuQWN0aW9uRWRpdG9yVGl0bGVBc3luY30gZnJvbSAnLi4vLi4vLi4vaGVscGVycy9pMThuJztcbmltcG9ydCB7QWN0aW9uSW5zdGFuY2V9IGZyb20gJy4uLy4uLy4uL21vZGVscy9leGVjdXRpb24vYWN0aW9uLWluc3RhbmNlLm1vZGVsJztcbmltcG9ydCB7QWN0aW9uRXhlY3V0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hY3Rpb24tZXhlY3V0b3Iuc2VydmljZSc7XG5pbXBvcnQge3Byb3ZpZGVBY3Rpb25FeGVjdXRvcn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJvdmlkZXJzL3Byb3ZpZGUtYWN0aW9uLWV4ZWN1dG9yJztcbmltcG9ydCB7Vmlld0NvbnRhaW5lcn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmlldy1jb250YWluZXIuc2VydmljZSc7XG5pbXBvcnQge0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi4vLi4vYWN0aW9uL2FjdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWFjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ2FjdGlvbi1lZGl0b3ItaW5qZWN0b3ItY29udGV4dC5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtBY3Rpb25Db21wb25lbnQsIFByb2dyZXNzU3Bpbm5lck1vZHVsZSwgRm9ybUVkaXRvckNvbXBvbmVudCwgVG9vbGJhck1vZHVsZSwgRWRpdG9yQXV0b1NhdmVTdGF0dXNDb21wb25lbnRdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVBY3Rpb25FeGVjdXRvcigpXVxufSlcbmV4cG9ydCBjbGFzcyBBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRDb21wb25lbnQ8SXRlbSA9IGFueSwgU2VydmljZSA9IGFueT4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIElBY3Rpb25FZGl0b3JDb21wb25lbnQge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0gPSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW07XG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQ7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3QoQ29uZmlybWF0aW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSgnQWN0aW9uRWRpdG9ySW5qZWN0b3JDb250ZXh0Q29tcG9uZW50Jyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zU2VydmljZSA9IGluamVjdChDb21tb25zU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25FeGVjdXRvciA9IGluamVjdChBY3Rpb25FeGVjdXRvclNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyLCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIC8vIG1ldGFkYXRhIGFuZCBlZGl0b3IgbW9kZSBpbnB1dFxuICAgIGRhdGEgPSBpbnB1dC5yZXF1aXJlZDxBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRJbnB1dERhdGE8SXRlbSwgU2VydmljZT4+KCk7XG5cbiAgICBwdWJsaWMgYWN0aW9uUnVuID0gb3V0cHV0PEl0ZW0gfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICAgIHB1YmxpYyBhY3Rpb25DYW5jZWwgPSBvdXRwdXQ8SXRlbSB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvLyBjb250ZW50IGFuZCB2aWV3IHF1ZXJpZXNcbiAgICBwdWJsaWMgZm9ybUVkaXRvckNtcCA9IHZpZXdDaGlsZChGb3JtRWRpdG9yQ29tcG9uZW50KTtcblxuICAgIHByaXZhdGUgaGFzVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvclRpdGxlICE9PSBudWxsKTtcbiAgICBwdWJsaWMgdGl0bGUgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBpc0Zvcm1EaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvLyBkYXRhXG4gICAgcHVibGljIGl0ZW0gPSBzaWduYWw8SXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgaXRlbUlkID0gc2lnbmFsPElkVHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgYWN0aW9uRGF0YSA9IHNpZ25hbDxBY3Rpb25EYXRhIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBlZGl0b3JBY3Rpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGEoKS5kZXNjcmlwdG9yKTtcblxuICAgIC8vIGFjdGlvbnNcbiAgICBwcml2YXRlIGFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0+W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5lZGl0b3JBY3Rpb24oKS5lZGl0b3JBY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aEJ1dHRvbk9wdHMoe1xuICAgICAgICAgICAgICAgICAgICAuLi5hY3Rpb24uYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICBpY29uOiBhY3Rpb24uYnV0dG9uPy5pY29uID09PSB1bmRlZmluZWQgPyAoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCA/ICdwaSBwaS1jaGVjaycgOiAncGkgcGktdGltZXMnKSA6IGFjdGlvbi5idXR0b24uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYnV0dG9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2dlbmVyYWwuc2F2ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRhdGEoKS5pc0RpYWxvZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2dlbmVyYWwuY2xvc2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZ2VuZXJhbC5jYW5jZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhY3Rpb24uYnV0dG9uLmxhYmVsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBhc3NpZ24gcnVuIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aE5vdGlmaWNhdGlvbnMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMudmlld0NvbnRhaW5lcj8uYWN0aW9ucygpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5wb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXM/LmluY2x1ZGVzKHRoaXMuZWRpdG9yQWN0aW9uKCkudGFibGV2aWV3Q2F0ZWdvcnkhKSkgPz8gW10pIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgfSk7XG4gICAgcHVibGljIHRvb2xiYXJMZWZ0QWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWN0aW9ucygpLmZpbHRlcihhID0+IGEucG9zaXRpb24gPT09IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCkpO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5hY3Rpb25zKClcbiAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhLnBvc2l0aW9uID09PSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0KVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICk7XG4gICAgcHVibGljIGZvb3RlckxlZnRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hY3Rpb25zKCkuZmlsdGVyKGEgPT4gYS5wb3NpdGlvbiA9PT0gQWN0aW9uUG9zaXRpb25FbnVtLkZvb3RlckxlZnQpKTtcbiAgICBwdWJsaWMgZm9vdGVyUmlnaHRBY3Rpb25zID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5hY3Rpb25zKClcbiAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhLnBvc2l0aW9uID09PSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHQpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgKTtcblxuICAgIHByaXZhdGUgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPjtcbiAgICBwcml2YXRlIGluc3RhbmNlU3RhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVJlYWN0aXZhdGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIHB1YmxpYyBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcml2YXRlIGZldGNoRXhlY3V0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBmb3JtVmFsdWUgPSBzaWduYWw8SXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgc3VibWl0TG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgcHVibGljIGF1dG9TYXZlU3RhdHVzID0gc2lnbmFsPEVkaXRvckF1dG9TYXZlU3RhdHVzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHByaXZhdGUgc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgbGFzdFN1Ym1pdEl0ZW0/OiBJdGVtO1xuXG4gICAgLy8gc3Vic2NyaXB0aW9ucyBhbmQgZWZmZWN0c1xuICAgICN0aXRsZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI2RhdGFFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhcbiAgICAgICAgW3RoaXMuZGF0YV0sXG4gICAgICAgIChbZGF0YV0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXRlbS5zZXQoZGF0YS5pdGVtKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbUlkLnNldChkYXRhLml0ZW1JZCk7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkRhdGEuc2V0KGRhdGEuYWN0aW9uRGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmFjdGlvbkluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQWN0aW9uSW5zdGFuY2UoZGF0YS5hY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG5vdGlmeSBleGVjdXRvciB0byBmb3IgYWN0aXZhdGlvbiB0byBlbmRcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbkluc3RhbmNlKHRoaXMuYWN0aW9uRXhlY3V0b3Iub25BY3Rpb25FZGl0b3JJbml0KHRoaXMuZWRpdG9yQWN0aW9uKCksIHRoaXMuaW5zdGFuY2UsIHRoaXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAge2ZpcnN0T25seTogdHJ1ZX1cbiAgICApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAjaGFzVGl0bGVFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhbdGhpcy5oYXNUaXRsZV0sIChbaGFzVGl0bGVdKSA9PiB7XG4gICAgICAgIGlmICghaGFzVGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiN0aXRsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuI3RpdGxlU3Vic2NyaXB0aW9uID0gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuZWRpdG9yQWN0aW9uKCksIHRoaXMuaXRlbSgpKS5zdWJzY3JpYmUodCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50aXRsZS5zZXQodCA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI3RpdGxlVXBkYXRlU3Vic2NyaXB0aW9uID0gdG9PYnNlcnZhYmxlKHRoaXMuaGFzVGl0bGUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodG9PYnNlcnZhYmxlKHRoaXMuZWRpdG9yQWN0aW9uKSwgdG9PYnNlcnZhYmxlKHRoaXMuaXRlbSkpLFxuICAgICAgICAgICAgbWVyZ2VNYXAoKFtoYXNUaXRsZSwgZWRpdG9yQWN0aW9uLCBpdGVtXSkgPT4gKGhhc1RpdGxlID8gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModGhpcy50cmFuc2xhdGUsIGVkaXRvckFjdGlvbiwgaXRlbSkgOiBvZih1bmRlZmluZWQpKSksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodGl0bGUgPT4ge1xuICAgICAgICAgICAgdGhpcy50aXRsZS5zZXQodGl0bGUgPz8gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgY29uc3QgZGF0YURpYWxvZ0NvbmZpZyA9IHRoaXMuZGF0YSgpLmRpYWxvZ0NvbmZpZztcbiAgICAgICAgICAgIGlmIChkYXRhRGlhbG9nQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgZGF0YURpYWxvZ0NvbmZpZy5oZWFkZXIgPSB0aXRsZSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNTZXJ2aWNlLnNldFBhZ2VUaXRsZSh0aXRsZSA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgI3ZpZXdDb250YWluZXJFZGl0b3JSZXNldFN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0NvbnRhaW5lclxuICAgICAgICA/IHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbilcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoYSA9PiAodGhpcy5pc0FjdGlvbk1haW5Ud0VkaXRvcihhKSA/ICh0aGlzLnZpZXdDb250YWluZXI/LmVkaXRvclJlc2V0JCA/PyBORVZFUikgOiBORVZFUikpLFxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgIG5leHQ6IGUgPT4gdGhpcy5vbkVkaXRvclJlc2V0KGUpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICN2aWV3Q29udGFpbmVyRWRpdG9yQ2xvc2VTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJcbiAgICAgICAgPyB0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKGEgPT4gKHRoaXMuaXNBY3Rpb25NYWluVHdFZGl0b3IoYSkgPyAodGhpcy52aWV3Q29udGFpbmVyPy5lZGl0b3JDbG9zZSQgPz8gTkVWRVIpIDogTkVWRVIpKSxcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICNkYXRhUHJvdmlkZXJFZGl0b3JSZXNldFN1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLmVkaXRvckFjdGlvbilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoYWN0aW9uID0+IChhY3Rpb24uZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXIgfCB1bmRlZmluZWQpPy5lZGl0b3JSZXNldCQgPz8gTkVWRVIpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGUgPT4gdGhpcy5vbkVkaXRvclJlc2V0KGUpXG4gICAgICAgIH0pO1xuICAgICN2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyRWRpdG9yUmVzZXRTdWJzY3JpcHRpb24gPSB0aGlzLnZpZXdDb250YWluZXJcbiAgICAgICAgPyB0b09ic2VydmFibGUodGhpcy52aWV3Q29udGFpbmVyLmRhdGFQcm92aWRlcilcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0b09ic2VydmFibGUodGhpcy5lZGl0b3JBY3Rpb24pKSxcbiAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoW2RhdGFQcm92aWRlciwgYWN0aW9uXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQWN0aW9uTWFpblR3RWRpdG9yKGFjdGlvbikgJiYgYWN0aW9uLmRhdGFQcm92aWRlciA9PSBudWxsID8gKChkYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlciB8IHVuZGVmaW5lZCk/LmVkaXRvclJlc2V0JCA/PyBORVZFUikgOiBORVZFUlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICBuZXh0OiBlID0+IHRoaXMub25FZGl0b3JSZXNldChlKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy4jdGl0bGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2U7XG4gICAgICAgIHRoaXMudW5zZXRJbnN0YW5jZSgpO1xuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLm9uQWN0aW9uRWRpdG9yRGVzdHJveShpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VibWl0KGV2ZW50OiBGb3JtRWRpdG9yU3VibWl0RXZlbnQ8SXRlbT4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEFjdGlvbiBpcyBub3QgaW5zdGFudGlhdGVkIGluIGFjdGlvbiBlZGl0b3IgZm9yIGFjdGlvbiAke3RoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aW9uTmFtZX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIC8vIHByZXBhcmUgcGFyYW1ldGVyc1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPiA9IHtcbiAgICAgICAgICAgICAgICBpdGVtSWQ6IHRoaXMuaXRlbUlkKCksXG4gICAgICAgICAgICAgICAgaXRlbTogZXZlbnQuZm9ybUl0ZW0sXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogdGhpcy5hY3Rpb25EYXRhKClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBY3Rpb24oKS5lZGl0b3JEZXNjcmlwdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy5sb2NhbGUgPSB0aGlzLmNvbW1vbnNTZXJ2aWNlLmdldERlZmF1bHRMb2NhbGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUNvbnRleHRGb3JFZGl0b3JTdWJtaXQoXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JBY3Rpb24oKSxcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSgpLmRhdGFQcm92aWRlcixcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSgpLnByZXZpb3VzQWN0aW9uSW5zdGFuY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zdWJtaXRFeGVjdXRpb25TdWJzY3JpcHRpb24gPSBjb250ZXh0LmV4ZWN1dGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFN1Ym1pdEl0ZW0gPSBldmVudC5mb3JtSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kZWxJZFByb3AgPSB0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IubW9kZWw/LmlkUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgIXRoaXMuaXRlbUlkKCkgJiYgbW9kZWxJZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGNvdmVyIGNyZWF0aW9uIVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtSWQocmVzW21vZGVsSWRQcm9wIGFzIGtleW9mIG9iamVjdF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUnVuLmVtaXQocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5ydW4oY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYEFjdGlvbiBlZGl0b3IgY2Fubm90IGJlIGNhbmNlbGVkIGZvciAke3RoaXMuZWRpdG9yQWN0aW9uKCkuYWN0aW9uTmFtZX0sIGJlY2F1c2Ugbm8gYWN0aW9uIGluc3RhbmNlIGlzIHByZXNlbnRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGlvbkNhbmNlbC5lbWl0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IuZmluaXNoQWN0aW9uKHRoaXMuaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVJdGVtSWQoaXRlbUlkOiBJZFR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pdGVtSWQuc2V0KGl0ZW1JZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUl0ZW0oaXRlbTogSXRlbSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLml0ZW0uc2V0KGl0ZW0pO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyU3VibWl0KCkge1xuICAgICAgICB0aGlzLmZvcm1FZGl0b3JDbXAoKT8uc3VibWl0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2UodmFsdWU6IEl0ZW0pIHtcbiAgICAgICAgdGhpcy5mb3JtVmFsdWUuc2V0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25BdXRvU2F2ZSh2YWx1ZTogRWRpdG9yQXV0b1NhdmVTdGF0dXMpIHtcbiAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1cy5zZXQodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmV0Y2hJdGVtKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQWN0aW9uIGlzIG5vdCBpbnN0YW50aWF0ZWQgaW4gYWN0aW9uIGVkaXRvciBmb3IgYWN0aW9uICR7dGhpcy5lZGl0b3JBY3Rpb24oKS5hY3Rpb25OYW1lfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4gPSB7XG4gICAgICAgICAgICBpdGVtSWQ6IHRoaXMuaXRlbUlkKCksXG4gICAgICAgICAgICBpdGVtOiB0aGlzLml0ZW0oKSxcbiAgICAgICAgICAgIGFjdGlvbkRhdGE6IHRoaXMuYWN0aW9uRGF0YSgpXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLmxvY2FsZSA9IHRoaXMuY29tbW9uc1NlcnZpY2UuYXBwRGF0YUxvY2FsZSgpITtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy5sb2NhbGUgPSB0aGlzLmNvbW1vbnNTZXJ2aWNlLmdldERlZmF1bHRMb2NhbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ucHJldmlvdXNJbnN0YW5jZSBpbnN0YW5jZW9mIEFjdGlvbkluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2UucHJldmlvdXNJbnN0YW5jZS5jb250ZXh0Py5wYXJhbWV0ZXJzLml0ZW0pIHtcbiAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMuZm9ybUl0ZW0gPSB0aGlzLmluc3RhbmNlLnByZXZpb3VzSW5zdGFuY2UuY29udGV4dC5wYXJhbWV0ZXJzLml0ZW07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmluc3RhbmNlPy5wcmV2aW91c0luc3RhbmNlPy5yZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLnN1Ym1pdFJlc3VsdCA9IHRoaXMuaW5zdGFuY2U/LnByZXZpb3VzSW5zdGFuY2U/LnJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yRmV0Y2goXG4gICAgICAgICAgICB0aGlzLmVkaXRvckFjdGlvbigpLFxuICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycyxcbiAgICAgICAgICAgIHRoaXMuZGF0YSgpLmRhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UsXG4gICAgICAgICAgICB0aGlzLmRhdGEoKS5wcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24gPSBjb250ZXh0LmV4ZWN1dGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbShyZXMgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5ydW4oY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRFZGl0b3JFbmFibGVkKGlzRW5hYmxlZCA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZC5zZXQoIWlzRW5hYmxlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzQWN0aW9uSW5zdGFuY2UoaW5zdGFuY2U6IElBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPikge1xuICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIEFjdGlvbkluc3RhbmNlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdVbmtub3duIHR5cGUgb2YgYWN0aW9uIGluc3RhbmNlIHJlY2VpdmVkJywge2RldGFpbHM6IGluc3RhbmNlfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlIHx8IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSAhPT0gaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSkge1xuICAgICAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuaW5zdGFuY2Uuc3RhdGUkLnN1YnNjcmliZShzID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRXJyb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRW5kOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ubmV4dEFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLk5leHRBY3Rpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ubmV4dEFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5FcnJvckFjdGlvblN0YXJ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/LmVycm9yQWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8uZXJyb3JBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRXJyb3JGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWw6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkRmluYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2UgY29weSBvZiBpdGVtIGFuZCB1cGRhdGUgdGl0bGUgdG8gYmUgb24gdGhlIGxhdGVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtKG9iamVjdERlZXBDb3B5KHRoaXMubGFzdFN1Ym1pdEl0ZW0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBhbHNvIHVuc2V0SW5zdGFuY2UsIGJ1dCBsZXQgdGhpcyBmb3IgcmVhY3RpdmF0aW9uSW5zdGFuY2UkIGxpc3RlbmVyIHRvIG5vdCBpbnRlcmZlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5pbnN0YW5jZS5yZWFjdGl2YXRpb25JbnN0YW5jZSQuc3Vic2NyaWJlKG5ld0luc3RhbmNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NBY3Rpb25JbnN0YW5jZShuZXdJbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZXRJbnN0YW5jZSgpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3Rpb25NYWluVHdFZGl0b3IoYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxhbnk+KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnkgIT0gbnVsbCAmJlxuICAgICAgICAgICAgW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkRFVEFJTFMsIFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkVESVQsIFRhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkFERF0uaW5jbHVkZXMoYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnKVxuICAgIHByaXZhdGUgYmVmb3JlV2luZG93VW5sb2FkKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKCkuaXNEaWFsb2cgJiYgdGhpcy5mb3JtRWRpdG9yQ21wKCk/LmZvcm0ucHJpc3RpbmUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlybSh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24ubWVzc2FnZScpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bi5Fc2NhcGUnKVxuICAgIHByaXZhdGUgb25Fc2NhcGVQcmVzc2VkKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmRhdGEoKS5pc0RpYWxvZyAmJlxuICAgICAgICAgICAgdGhpcy5lZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUgJiZcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYgJiZcbiAgICAgICAgICAgIHBhcnNlSW50KHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYpPy5pbnN0YW5jZS5jb250YWluZXI/LnN0eWxlLnpJbmRleCA/PyAnJykgPT09IFpJbmRleFV0aWxzLmdldEN1cnJlbnQoKVxuICAgICAgICApXG4gICAgICAgICAgICB0aGlzLmNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKGNhbGxGcm9tR3VhcmQgPSBmYWxzZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtRWRpdG9yQ21wKCk/LmZvcm0ucHJpc3RpbmUgPT09IGZhbHNlICYmIHRoaXMuZWRpdG9yQWN0aW9uKCkudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbkRpYWxvZyhjYWxsRnJvbUd1YXJkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghY2FsbEZyb21HdWFyZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93VW5zYXZlZENoYW5nZXNDb25maXJtYXRpb25EaWFsb2coY2FsbEZyb21HdWFyZDogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24uaGVhZGVyJyksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24ubWVzc2FnZScpLFxuICAgICAgICAgICAgYWNjZXB0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2dlbmVyYWwueWVzJyksXG4gICAgICAgICAgICByZWplY3RMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZ2VuZXJhbC5ubycpLFxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY2FsbEZyb21HdWFyZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkVkaXRvclJlc2V0KGV2ZW50PzogRWRpdG9yUmVzZXRFdmVudDxJdGVtPikge1xuICAgICAgICBpZiAoZXZlbnQ/LmZldGNoKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoSXRlbSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50Py5pdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FZGl0b3JDbXAoKT8ucmVzZXRGb3JtTW9kZWwoZXZlbnQuaXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQ/LmZpZWxkcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRWRpdG9yQ21wKCk/LnJlc2V0RmllbGRWYWx1ZShrZXksIGV2ZW50LmZpZWxkc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUVkaXRvckNtcCgpPy5yZXNldEZvcm1Nb2RlbCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkVkaXRvckluamVjdG9yQ29udGV4dElucHV0RGF0YTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgZGVzY3JpcHRvcjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbSwgU2VydmljZT47XG4gICAgaXNEaWFsb2c6IGJvb2xlYW47XG4gICAgZGlhbG9nQ29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZztcbiAgICBpdGVtSWQ/OiBJZFR5cGU7XG4gICAgaXRlbT86IEl0ZW07XG4gICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGE7XG4gICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPjtcbiAgICBhY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+O1xuICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBJQWN0aW9uSW5zdGFuY2U8YW55LCBhbnk+O1xufVxuIiwiQGlmICghZGF0YSgpLmlzRGlhbG9nICYmIHRpdGxlKCkpIHtcbiAgICA8aDU+e3sgdGl0bGUoKSB9fTwvaDU+XG59XG5AaWYgKGRhdGEoKS5pc0RpYWxvZyAmJiBlZGl0b3JBY3Rpb24oKS5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICA8c3BhbiBjbGFzcz1cInAtZGlhbG9nLWhlYWRlciBkaWFsb2ctY2xvc2UtYnV0dG9uLXdyYXBwZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXItaWNvbiBwLWRpYWxvZy1oZWFkZXItbWF4aW1pemUgcC1saW5rXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKClcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXItY2xvc2UtaWNvbiBwaSBwaS10aW1lc1wiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPlxufVxuPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgQGlmICh0b29sYmFyTGVmdEFjdGlvbnMoKS5sZW5ndGggPiAwIHx8IHRvb2xiYXJSaWdodEFjdGlvbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci10b29sYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibW5nLWFjdGlvbi1lZGl0b3ItdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiB0b29sYmFyTGVmdEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmcoKSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWQoKVwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiB0b29sYmFyUmlnaHRBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiZm9ybVZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLXRvb2xiYXI+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIFtzdHlsZV09XCJ7d2lkdGg6ICczcmVtJywgaGVpZ2h0OiAnM3JlbSd9XCIgc3Ryb2tlV2lkdGg9XCIzXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvciAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8bW5nLWZvcm0tZWRpdG9yXG4gICAgICAgICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiZWRpdG9yQWN0aW9uKCkuZWRpdG9yRGVzY3JpcHRvclwiXG4gICAgICAgICAgICAgICAgW2VkaXRvcklkXT1cImVkaXRvckFjdGlvbigpLmFjdGlvbk5hbWVMb25nXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtKClcIlxuICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIlxuICAgICAgICAgICAgICAgIFtpc0Zvcm1EaXNhYmxlZF09XCJpc0Zvcm1EaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICBzaG93QXV0b1NhdmVTdGF0dXM9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvcm1TdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGF1dG9TYXZlU3RhdHVzKT1cIm9uQXV0b1NhdmUoJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtbmctYWN0aW9uLWVkaXRvci1mb290ZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgZm9vdGVyTGVmdEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGVkaXRvckFjdGlvbigpLmVkaXRvckRlc2NyaXB0b3IuYXV0b1NhdmUpIHtcbiAgICAgICAgICAgICAgICA8bW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzIFtzdGF0dXNdPVwiYXV0b1NhdmVTdGF0dXMoKVwiPjwvbW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBmb290ZXJSaWdodEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJmb3JtVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -22,4 +22,4 @@ export function actionExecutionSelectDataProvider(action, dataProvider, viewCont
22
22
  source: ActionDataProviderSource.Undefined
23
23
  };
24
24
  }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2hlbHBlcnMvYWN0aW9uLWV4ZWN1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUVsRixNQUFNLFVBQVUsaUNBQWlDLENBQzdDLE1BQTJDLEVBQzNDLFlBQTJDLEVBQzNDLGFBQStDO0lBSy9DLElBQUksWUFBWSxFQUFFLENBQUM7UUFDZixPQUFPO1lBQ0gsWUFBWTtZQUNaLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxnQkFBZ0I7U0FDcEQsQ0FBQztJQUNOLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixPQUFPO1lBQ0gsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQ2pDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxVQUFVO1NBQzlDLENBQUM7SUFDTixDQUFDO0lBQ0QsSUFBSSxhQUFhLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQztRQUNoQyxPQUFPO1lBQ0gsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUU7WUFDM0MsTUFBTSxFQUFFLHdCQUF3QixDQUFDLGFBQWE7U0FDakQsQ0FBQztJQUNOLENBQUM7SUFDRCxPQUFPO1FBQ0gsTUFBTSxFQUFFLHdCQUF3QixDQUFDLFNBQVM7S0FDN0MsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lEYXRhUHJvdmlkZXJ9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3JJbnN0LCBJVmlld0NvbnRhaW5lcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuaW1wb3J0IHtBY3Rpb25EYXRhUHJvdmlkZXJTb3VyY2V9IGZyb20gJy4uL21vZGVscy9leGVjdXRpb24vYWN0aW9uLWNvbnRleHQubW9kZWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uRXhlY3V0aW9uU2VsZWN0RGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+KFxuICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbSwgU2VydmljZT4sXG4gICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPixcbiAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8YW55LCBhbnk+IHwgbnVsbFxuKToge1xuICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8SXRlbSwgU2VydmljZT47XG4gICAgc291cmNlOiBBY3Rpb25EYXRhUHJvdmlkZXJTb3VyY2U7XG59IHtcbiAgICBpZiAoZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICBzb3VyY2U6IEFjdGlvbkRhdGFQcm92aWRlclNvdXJjZS5QYXJhbWV0ZXJPcklucHV0XG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChhY3Rpb24uZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXI6IGFjdGlvbi5kYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICBzb3VyY2U6IEFjdGlvbkRhdGFQcm92aWRlclNvdXJjZS5EZXNjcmlwdG9yXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICh2aWV3Q29udGFpbmVyPy5kYXRhUHJvdmlkZXIoKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiB2aWV3Q29udGFpbmVyPy5kYXRhUHJvdmlkZXIoKSxcbiAgICAgICAgICAgIHNvdXJjZTogQWN0aW9uRGF0YVByb3ZpZGVyU291cmNlLlZpZXdDb250YWluZXJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBBY3Rpb25EYXRhUHJvdmlkZXJTb3VyY2UuVW5kZWZpbmVkXG4gICAgfTtcbn1cbiJdfQ==
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2hlbHBlcnMvYWN0aW9uLWV4ZWN1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUVsRixNQUFNLFVBQVUsaUNBQWlDLENBQzdDLE1BQTBELEVBQzFELFlBQTJDLEVBQzNDLGFBQStDO0lBSy9DLElBQUksWUFBWSxFQUFFLENBQUM7UUFDZixPQUFPO1lBQ0gsWUFBWTtZQUNaLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxnQkFBZ0I7U0FDcEQsQ0FBQztJQUNOLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixPQUFPO1lBQ0gsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQ2pDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxVQUFVO1NBQzlDLENBQUM7SUFDTixDQUFDO0lBQ0QsSUFBSSxhQUFhLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQztRQUNoQyxPQUFPO1lBQ0gsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUU7WUFDM0MsTUFBTSxFQUFFLHdCQUF3QixDQUFDLGFBQWE7U0FDakQsQ0FBQztJQUNOLENBQUM7SUFDRCxPQUFPO1FBQ0gsTUFBTSxFQUFFLHdCQUF3QixDQUFDLFNBQVM7S0FDN0MsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lEYXRhUHJvdmlkZXJ9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3JJbnN0LCBJVmlld0NvbnRhaW5lcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuaW1wb3J0IHtBY3Rpb25EYXRhUHJvdmlkZXJTb3VyY2V9IGZyb20gJy4uL21vZGVscy9leGVjdXRpb24vYWN0aW9uLWNvbnRleHQubW9kZWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uRXhlY3V0aW9uU2VsZWN0RGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+KFxuICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbSwgU2VydmljZSwgYW55LCBhbnksIGFueT4sXG4gICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPixcbiAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8YW55LCBhbnk+IHwgbnVsbFxuKToge1xuICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8SXRlbSwgU2VydmljZT47XG4gICAgc291cmNlOiBBY3Rpb25EYXRhUHJvdmlkZXJTb3VyY2U7XG59IHtcbiAgICBpZiAoZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICBzb3VyY2U6IEFjdGlvbkRhdGFQcm92aWRlclNvdXJjZS5QYXJhbWV0ZXJPcklucHV0XG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChhY3Rpb24uZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXI6IGFjdGlvbi5kYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICBzb3VyY2U6IEFjdGlvbkRhdGFQcm92aWRlclNvdXJjZS5EZXNjcmlwdG9yXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICh2aWV3Q29udGFpbmVyPy5kYXRhUHJvdmlkZXIoKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiB2aWV3Q29udGFpbmVyPy5kYXRhUHJvdmlkZXIoKSxcbiAgICAgICAgICAgIHNvdXJjZTogQWN0aW9uRGF0YVByb3ZpZGVyU291cmNlLlZpZXdDb250YWluZXJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBBY3Rpb25EYXRhUHJvdmlkZXJTb3VyY2UuVW5kZWZpbmVkXG4gICAgfTtcbn1cbiJdfQ==
@@ -1,27 +1,44 @@
1
1
  import { map, mergeMap } from 'rxjs/operators';
2
2
  import { getI18n, getI18nAsync } from '@mediusinc/mng-commons/core';
3
3
  import { getI18nModelParams, getI18nModelParamsAsync } from '@mediusinc/mng-commons/model';
4
- export function getI18nForAction(translate, action, actionPathKeys, customKey, item, fallbackKey, params, missingTranslationStrategy = 'returnFirstKey') {
5
- const keys = getKeysByPriority(action, actionPathKeys, customKey, fallbackKey);
6
- const i18nParams = getI18nActionParams(translate, action, item, params);
4
+ /**
5
+ * Asynchronously retrieves internationalized text for a specified action.
6
+ *
7
+ * If no translation is found for actionPathKeys, the fallback is used (if provided).
8
+ * If custom key is provided, no other key will be used.
9
+ * Item can be interpolated under itemTitle, itemId (if specified in action model) or under item.* (JSON-like path to property).
10
+ * Params are interpolated in translation.
11
+ *
12
+ * @param {TranslateService} translate - The translation service used for retrieving localized strings.
13
+ * @param {ActionDescriptorInst<any>} action - The action descriptor that provides context for localization keys and parameters.
14
+ * @param {string | Array<string>} pathKeys - A string or array of strings representing the priority order of localization keys to look up for the action.
15
+ * @param {ActionI18nOptsType} [opts] - Optional settings to customize the localization behavior, including custom keys, fallback keys, parameters, and missing translation strategies.
16
+ * @return {Observable<string | null>} An observable that emits the localized string for the action or null if no appropriate translation is found.
17
+ */
18
+ export function getI18nForAction(translate, action, pathKeys, opts) {
19
+ const keys = getKeysByPriority(action, pathKeys, opts?.customKey, opts?.fallbackKey);
20
+ const i18nParams = getI18nActionParams(translate, action, opts?.item, opts?.params);
7
21
  const i18nValue = getI18n(translate, i18nParams, ...keys);
8
- return getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey });
22
+ return getTranslationDependingOnStrategy(opts?.missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey: opts?.fallbackKey });
9
23
  }
10
24
  /**
11
- * Returns async translation for given keys with given params.
12
- * @param translate TranslateService
13
- * @param action action descriptor
14
- * @param actionPathKeys action path keys
15
- * @param customKey custom key
16
- * @param item item
17
- * @param fallbackKey fallback key, used as fallback key
18
- * @param params additional params for translation
19
- * @param missingTranslationStrategy strategy when no translation is found
25
+ * Asynchronously retrieves internationalized text for a specified action.
26
+ *
27
+ * If no translation is found for actionPathKeys, the fallback is used (if provided).
28
+ * If custom key is provided, no other key will be used.
29
+ * Item can be interpolated under itemTitle, itemId (if specified in action model) or under item.* (JSON-like path to property).
30
+ * Params are interpolated in translation.
31
+ *
32
+ * @param {TranslateService} translate - The translation service used for retrieving localized strings.
33
+ * @param {ActionDescriptorInst<any>} action - The action descriptor that provides context for localization keys and parameters.
34
+ * @param {string | Array<string>} pathKeys - A string or array of strings representing the priority order of localization keys to look up for the action.
35
+ * @param {ActionI18nOptsType} [opts] - Optional settings to customize the localization behavior, including custom keys, fallback keys, parameters, and missing translation strategies.
36
+ * @return {Observable<string | null>} An observable that emits the localized string for the action or null if no appropriate translation is found.
20
37
  */
21
- export function getI18nForActionAsync(translate, action, actionPathKeys, customKey, item, fallbackKey, params, missingTranslationStrategy = 'returnFirstKey') {
22
- return getI18nActionParamsAsync(translate, action, item, params).pipe(mergeMap(i18nParams => {
23
- const keys = getKeysByPriority(action, actionPathKeys, customKey, fallbackKey);
24
- return getI18nAsync(translate, i18nParams, ...keys).pipe(map(i18nValue => getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey })));
38
+ export function getI18nForActionAsync(translate, action, pathKeys, opts) {
39
+ return getI18nActionParamsAsync(translate, action, opts?.item, opts?.params).pipe(mergeMap(i18nParams => {
40
+ const keys = getKeysByPriority(action, pathKeys, opts?.customKey, opts?.fallbackKey);
41
+ return getI18nAsync(translate, i18nParams, ...keys).pipe(map(i18nValue => getTranslationDependingOnStrategy(opts?.missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey: opts?.fallbackKey })));
25
42
  }));
26
43
  }
27
44
  /**
@@ -40,15 +57,16 @@ function getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nVal
40
57
  case 'returnFallbackKey':
41
58
  return fallbackKey ?? null;
42
59
  case 'returnFirstKey':
60
+ default:
43
61
  return firstKey ?? null;
44
62
  }
45
63
  }
46
64
  }
47
65
  export function getI18nActionTitleAsync(translate, action, item) {
48
- return getI18nForActionAsync(translate, action, 'title', undefined, item);
66
+ return getI18nForActionAsync(translate, action, 'title', { item });
49
67
  }
50
68
  export function getI18nActionEditorTitleAsync(translate, action, item) {
51
- return getI18nForActionAsync(translate, action, ['editor.title', 'title'], action.editorTitle ?? undefined, item, undefined, action.editorTitleParams ?? undefined);
69
+ return getI18nForActionAsync(translate, action, ['editor.title', 'title'], { customKey: action.editorTitle ?? undefined, item, params: action.editorTitleParams });
52
70
  }
53
71
  export function getI18nActionParams(translate, action, item, params = {}) {
54
72
  const i18nParams = getI18nModelParams(translate, action.model ?? undefined, item, params);
@@ -66,17 +84,19 @@ function getKeysByPriority(action, actionPathKeys, customKey, fallbackKey) {
66
84
  if (customKey) {
67
85
  keys.push(customKey);
68
86
  }
69
- if (!Array.isArray(actionPathKeys)) {
70
- actionPathKeys = [actionPathKeys];
71
- }
72
- actionPathKeys.forEach(k => {
73
- if (action.i18nModelActionBaseKey)
74
- keys.push(`${action.i18nModelActionBaseKey}.${k}`);
75
- keys.push(`${action.actionName}.${k}`);
76
- });
77
- if (fallbackKey) {
78
- keys.push(fallbackKey);
87
+ else {
88
+ if (!Array.isArray(actionPathKeys)) {
89
+ actionPathKeys = [actionPathKeys];
90
+ }
91
+ actionPathKeys.forEach(k => {
92
+ if (action.i18nModelActionBaseKey)
93
+ keys.push(`${action.i18nModelActionBaseKey}.${k}`);
94
+ keys.push(`${action.actionName}.${k}`);
95
+ });
96
+ if (fallbackKey) {
97
+ keys.push(fallbackKey);
98
+ }
79
99
  }
80
100
  return keys;
81
101
  }
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2hlbHBlcnMvaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBaUMsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2xHLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBR3pGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDNUIsU0FBMkIsRUFDM0IsTUFBaUMsRUFDakMsY0FBc0MsRUFDdEMsU0FBa0IsRUFDbEIsSUFBVSxFQUNWLFdBQW9CLEVBQ3BCLE1BQVksRUFDWiw2QkFBNkQsZ0JBQWdCO0lBRTdFLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQy9FLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDMUQsT0FBTyxpQ0FBaUMsQ0FBQywwQkFBMEIsRUFBRSxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7QUFDdEgsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLFNBQTJCLEVBQzNCLE1BQWlDLEVBQ2pDLGNBQXNDLEVBQ3RDLFNBQWtCLEVBQ2xCLElBQVUsRUFDVixXQUFvQixFQUNwQixNQUFZLEVBQ1osNkJBQTZELGdC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QUksR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDakMsY0FBYyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxNQUFNLENBQUMsc0JBQXNCO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7STE4bk1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5LCBnZXRJMThuLCBnZXRJMThuQXN5bmN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge2dldEkxOG5Nb2RlbFBhcmFtcywgZ2V0STE4bk1vZGVsUGFyYW1zQXN5bmN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9ySW5zdCwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3R9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJMThuRm9yQWN0aW9uKFxuICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4sXG4gICAgYWN0aW9uUGF0aEtleXM6IHN0cmluZyB8IEFycmF5PHN0cmluZz4sXG4gICAgY3VzdG9tS2V5Pzogc3RyaW5nLFxuICAgIGl0ZW0/OiBhbnksXG4gICAgZmFsbGJhY2tLZXk/OiBzdHJpbmcsXG4gICAgcGFyYW1zPzogYW55LFxuICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5OiBJMThuTWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3kgPSAncmV0dXJuRmlyc3RLZXknXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBrZXlzID0gZ2V0S2V5c0J5UHJpb3JpdHkoYWN0aW9uLCBhY3Rpb25QYXRoS2V5cywgY3VzdG9tS2V5LCBmYWxsYmFja0tleSk7XG4gICAgY29uc3QgaTE4blBhcmFtcyA9IGdldEkxOG5BY3Rpb25QYXJhbXModHJhbnNsYXRlLCBhY3Rpb24sIGl0ZW0sIHBhcmFtcyk7XG4gICAgY29uc3QgaTE4blZhbHVlID0gZ2V0STE4bih0cmFuc2xhdGUsIGkxOG5QYXJhbXMsIC4uLmtleXMpO1xuICAgIHJldHVybiBnZXRUcmFuc2xhdGlvbkRlcGVuZGluZ09uU3RyYXRlZ3kobWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3ksIHtpMThuVmFsdWUsIGZpcnN0S2V5OiBrZXlzWzBdLCBmYWxsYmFja0tleX0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYXN5bmMgdHJhbnNsYXRpb24gZm9yIGdpdmVuIGtleXMgd2l0aCBnaXZlbiBwYXJhbXMuXG4gKiBAcGFyYW0gdHJhbnNsYXRlIFRyYW5zbGF0ZVNlcnZpY2VcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uIGRlc2NyaXB0b3JcbiAqIEBwYXJhbSBhY3Rpb25QYXRoS2V5cyBhY3Rpb24gcGF0aCBrZXlzXG4gKiBAcGFyYW0gY3VzdG9tS2V5IGN1c3RvbSBrZXlcbiAqIEBwYXJhbSBpdGVtIGl0ZW1cbiAqIEBwYXJhbSBmYWxsYmFja0tleSBmYWxsYmFjayBrZXksIHVzZWQgYXMgZmFsbGJhY2sga2V5XG4gKiBAcGFyYW0gcGFyYW1zIGFkZGl0aW9uYWwgcGFyYW1zIGZvciB0cmFuc2xhdGlvblxuICogQHBhcmFtIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5IHN0cmF0ZWd5IHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5Gb3JBY3Rpb25Bc3luYyhcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+LFxuICAgIGFjdGlvblBhdGhLZXlzOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+LFxuICAgIGN1c3RvbUtleT86IHN0cmluZyxcbiAgICBpdGVtPzogYW55LFxuICAgIGZhbGxiYWNrS2V5Pzogc3RyaW5nLFxuICAgIHBhcmFtcz86IGFueSxcbiAgICBtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneTogSTE4bk1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5ID0gJ3JldHVybkZpcnN0S2V5J1xuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIGdldEkxOG5BY3Rpb25QYXJhbXNBc3luYyh0cmFuc2xhdGUsIGFjdGlvbiwgaXRlbSwgcGFyYW1zKS5waXBlKFxuICAgICAgICBtZXJnZU1hcChpMThuUGFyYW1zID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBnZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIGFjdGlvblBhdGhLZXlzLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIHJldHVybiBnZXRJMThuQXN5bmModHJhbnNsYXRlLCBpMThuUGFyYW1zLCAuLi5rZXlzKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChpMThuVmFsdWUgPT4gZ2V0VHJhbnNsYXRpb25EZXBlbmRpbmdPblN0cmF0ZWd5KG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5LCB7aTE4blZhbHVlLCBmaXJzdEtleToga2V5c1swXSwgZmFsbGJhY2tLZXl9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRyYW5zbGF0aW9uIGRlcGVuZGluZyBvbiBtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneVxuICogQHBhcmFtIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5IHN0cmF0ZWd5IHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgZm91bmRcbiAqIEBwYXJhbSB2YWx1ZXMgb2JqZWN0IHdpdGggdmFsdWVzLCBpMThuVmFsdWUgaXMgdHJhbnNsYXRpb24sIGZpcnN0S2V5IGlzIGZpcnN0IGtleSBpbiBhcnJheSBvZiBrZXlzLCBmYWxsYmFja0tleSBpcyBmYWxsYmFjayBrZXlcbiAqL1xuZnVuY3Rpb24gZ2V0VHJhbnNsYXRpb25EZXBlbmRpbmdPblN0cmF0ZWd5KFxuICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5OiBJMThuTWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3ksXG4gICAge2kxOG5WYWx1ZSwgZmlyc3RLZXksIGZhbGxiYWNrS2V5fToge2kxOG5WYWx1ZTogc3RyaW5nIHwgbnVsbDsgZmlyc3RLZXk/OiBzdHJpbmc7IGZhbGxiYWNrS2V5Pzogc3RyaW5nfVxuKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKGkxOG5WYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gaTE4blZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaCAobWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ3JldHVybk51bGwnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY2FzZSAncmV0dXJuRmFsbGJhY2tLZXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxsYmFja0tleSA/PyBudWxsO1xuICAgICAgICAgICAgY2FzZSAncmV0dXJuRmlyc3RLZXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdEtleSA/PyBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvblRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4sIGl0ZW0/OiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLCAndGl0bGUnLCB1bmRlZmluZWQsIGl0ZW0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PGFueT4sIGl0ZW0/OiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLCBbJ2VkaXRvci50aXRsZScsICd0aXRsZSddLCBhY3Rpb24uZWRpdG9yVGl0bGUgPz8gdW5kZWZpbmVkLCBpdGVtLCB1bmRlZmluZWQsIGFjdGlvbi5lZGl0b3JUaXRsZVBhcmFtcyA/PyB1bmRlZmluZWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvblBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgY29uc3QgaTE4blBhcmFtcyA9IGdldEkxOG5Nb2RlbFBhcmFtcyh0cmFuc2xhdGUsIGFjdGlvbi5tb2RlbCA/PyB1bmRlZmluZWQsIGl0ZW0sIHBhcmFtcyk7XG4gICAgcmV0dXJuIHBvcHVsYXRlSTE4bkFjdGlvblBhcmFtcyhpMThuUGFyYW1zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5BY3Rpb25QYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIGdldEkxOG5Nb2RlbFBhcmFtc0FzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLm1vZGVsID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKS5waXBlKG1hcChpMThuUGFyYW1zID0+IHBvcHVsYXRlSTE4bkFjdGlvblBhcmFtcyhpMThuUGFyYW1zKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVJMThuQWN0aW9uUGFyYW1zKHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgIHBhcmFtcyA9IHsuLi5wYXJhbXN9O1xuICAgIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIGdldEtleXNCeVByaW9yaXR5KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgYWN0aW9uUGF0aEtleXM6IHN0cmluZyB8IEFycmF5PHN0cmluZz4sIGN1c3RvbUtleT86IHN0cmluZywgZmFsbGJhY2tLZXk/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXlzID0gW107XG4gICAgaWYgKGN1c3RvbUtleSkge1xuICAgICAgICBrZXlzLnB1c2goY3VzdG9tS2V5KTtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjdGlvblBhdGhLZXlzKSkge1xuICAgICAgICBhY3Rpb25QYXRoS2V5cyA9IFthY3Rpb25QYXRoS2V5c107XG4gICAgfVxuICAgIGFjdGlvblBhdGhLZXlzLmZvckVhY2goayA9PiB7XG4gICAgICAgIGlmIChhY3Rpb24uaTE4bk1vZGVsQWN0aW9uQmFzZUtleSkga2V5cy5wdXNoKGAke2FjdGlvbi5pMThuTW9kZWxBY3Rpb25CYXNlS2V5fS4ke2t9YCk7XG4gICAgICAgIGtleXMucHVzaChgJHthY3Rpb24uYWN0aW9uTmFtZX0uJHtrfWApO1xuICAgIH0pO1xuICAgIGlmIChmYWxsYmFja0tleSkge1xuICAgICAgICBrZXlzLnB1c2goZmFsbGJhY2tLZXkpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn1cbiJdfQ==
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2hlbHBlcnMvaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBaUMsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2xHLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBV3pGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsU0FBMkIsRUFBRSxNQUFpQyxFQUFFLFFBQWdDLEVBQUUsSUFBeUI7SUFDeEosTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRixNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDMUQsT0FBTyxpQ0FBaUMsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUUsRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7QUFDL0ksQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLFNBQTJCLEVBQzNCLE1BQWlDLEVBQ2pDLFFBQWdDLEVBQ2hDLElBQXlCO0lBRXpCLE9B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QUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLE1BQWlDLEVBQUUsY0FBc0MsRUFBRSxTQUFrQixFQUFFLFdBQW9CO0lBQzFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QixDQUFDO1NBQU0sQ0FBQztRQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDakMsY0FBYyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxNQUFNLENBQUMsc0JBQXNCO2dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsc0JBQXNCLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgbWVyZ2VNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtJMThuTWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3ksIGdldEkxOG4sIGdldEkxOG5Bc3luY30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7Z2V0STE4bk1vZGVsUGFyYW1zLCBnZXRJMThuTW9kZWxQYXJhbXNBc3luY30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3JJbnN0LCBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxudHlwZSBBY3Rpb25JMThuT3B0c1R5cGUgPSB7XG4gICAgY3VzdG9tS2V5Pzogc3RyaW5nO1xuICAgIGZhbGxiYWNrS2V5Pzogc3RyaW5nO1xuICAgIGl0ZW0/OiBhbnk7XG4gICAgcGFyYW1zPzogYW55O1xuICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5PzogSTE4bk1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5O1xufTtcblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSByZXRyaWV2ZXMgaW50ZXJuYXRpb25hbGl6ZWQgdGV4dCBmb3IgYSBzcGVjaWZpZWQgYWN0aW9uLlxuICpcbiAqIElmIG5vIHRyYW5zbGF0aW9uIGlzIGZvdW5kIGZvciBhY3Rpb25QYXRoS2V5cywgdGhlIGZhbGxiYWNrIGlzIHVzZWQgKGlmIHByb3ZpZGVkKS5cbiAqIElmIGN1c3RvbSBrZXkgaXMgcHJvdmlkZWQsIG5vIG90aGVyIGtleSB3aWxsIGJlIHVzZWQuXG4gKiBJdGVtIGNhbiBiZSBpbnRlcnBvbGF0ZWQgdW5kZXIgaXRlbVRpdGxlLCBpdGVtSWQgKGlmIHNwZWNpZmllZCBpbiBhY3Rpb24gbW9kZWwpIG9yIHVuZGVyIGl0ZW0uKiAoSlNPTi1saWtlIHBhdGggdG8gcHJvcGVydHkpLlxuICogUGFyYW1zIGFyZSBpbnRlcnBvbGF0ZWQgaW4gdHJhbnNsYXRpb24uXG4gKlxuICogQHBhcmFtIHtUcmFuc2xhdGVTZXJ2aWNlfSB0cmFuc2xhdGUgLSBUaGUgdHJhbnNsYXRpb24gc2VydmljZSB1c2VkIGZvciByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzLlxuICogQHBhcmFtIHtBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+fSBhY3Rpb24gLSBUaGUgYWN0aW9uIGRlc2NyaXB0b3IgdGhhdCBwcm92aWRlcyBjb250ZXh0IGZvciBsb2NhbGl6YXRpb24ga2V5cyBhbmQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nPn0gcGF0aEtleXMgLSBBIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgcHJpb3JpdHkgb3JkZXIgb2YgbG9jYWxpemF0aW9uIGtleXMgdG8gbG9vayB1cCBmb3IgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSB7QWN0aW9uSTE4bk9wdHNUeXBlfSBbb3B0c10gLSBPcHRpb25hbCBzZXR0aW5ncyB0byBjdXN0b21pemUgdGhlIGxvY2FsaXphdGlvbiBiZWhhdmlvciwgaW5jbHVkaW5nIGN1c3RvbSBrZXlzLCBmYWxsYmFjayBrZXlzLCBwYXJhbWV0ZXJzLCBhbmQgbWlzc2luZyB0cmFuc2xhdGlvbiBzdHJhdGVnaWVzLlxuICogQHJldHVybiB7T2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBsb2NhbGl6ZWQgc3RyaW5nIGZvciB0aGUgYWN0aW9uIG9yIG51bGwgaWYgbm8gYXBwcm9wcmlhdGUgdHJhbnNsYXRpb24gaXMgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJMThuRm9yQWN0aW9uKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+LCBwYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPiwgb3B0cz86IEFjdGlvbkkxOG5PcHRzVHlwZSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGtleXMgPSBnZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIHBhdGhLZXlzLCBvcHRzPy5jdXN0b21LZXksIG9wdHM/LmZhbGxiYWNrS2V5KTtcbiAgICBjb25zdCBpMThuUGFyYW1zID0gZ2V0STE4bkFjdGlvblBhcmFtcyh0cmFuc2xhdGUsIGFjdGlvbiwgb3B0cz8uaXRlbSwgb3B0cz8ucGFyYW1zKTtcbiAgICBjb25zdCBpMThuVmFsdWUgPSBnZXRJMThuKHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cyk7XG4gICAgcmV0dXJuIGdldFRyYW5zbGF0aW9uRGVwZW5kaW5nT25TdHJhdGVneShvcHRzPy5taXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSwge2kxOG5WYWx1ZSwgZmlyc3RLZXk6IGtleXNbMF0sIGZhbGxiYWNrS2V5OiBvcHRzPy5mYWxsYmFja0tleX0pO1xufVxuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IHJldHJpZXZlcyBpbnRlcm5hdGlvbmFsaXplZCB0ZXh0IGZvciBhIHNwZWNpZmllZCBhY3Rpb24uXG4gKlxuICogSWYgbm8gdHJhbnNsYXRpb24gaXMgZm91bmQgZm9yIGFjdGlvblBhdGhLZXlzLCB0aGUgZmFsbGJhY2sgaXMgdXNlZCAoaWYgcHJvdmlkZWQpLlxuICogSWYgY3VzdG9tIGtleSBpcyBwcm92aWRlZCwgbm8gb3RoZXIga2V5IHdpbGwgYmUgdXNlZC5cbiAqIEl0ZW0gY2FuIGJlIGludGVycG9sYXRlZCB1bmRlciBpdGVtVGl0bGUsIGl0ZW1JZCAoaWYgc3BlY2lmaWVkIGluIGFjdGlvbiBtb2RlbCkgb3IgdW5kZXIgaXRlbS4qIChKU09OLWxpa2UgcGF0aCB0byBwcm9wZXJ0eSkuXG4gKiBQYXJhbXMgYXJlIGludGVycG9sYXRlZCBpbiB0cmFuc2xhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1RyYW5zbGF0ZVNlcnZpY2V9IHRyYW5zbGF0ZSAtIFRoZSB0cmFuc2xhdGlvbiBzZXJ2aWNlIHVzZWQgZm9yIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MuXG4gKiBAcGFyYW0ge0FjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT59IGFjdGlvbiAtIFRoZSBhY3Rpb24gZGVzY3JpcHRvciB0aGF0IHByb3ZpZGVzIGNvbnRleHQgZm9yIGxvY2FsaXphdGlvbiBrZXlzIGFuZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtzdHJpbmcgfCBBcnJheTxzdHJpbmc+fSBwYXRoS2V5cyAtIEEgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBwcmlvcml0eSBvcmRlciBvZiBsb2NhbGl6YXRpb24ga2V5cyB0byBsb29rIHVwIGZvciB0aGUgYWN0aW9uLlxuICogQHBhcmFtIHtBY3Rpb25JMThuT3B0c1R5cGV9IFtvcHRzXSAtIE9wdGlvbmFsIHNldHRpbmdzIHRvIGN1c3RvbWl6ZSB0aGUgbG9jYWxpemF0aW9uIGJlaGF2aW9yLCBpbmNsdWRpbmcgY3VzdG9tIGtleXMsIGZhbGxiYWNrIGtleXMsIHBhcmFtZXRlcnMsIGFuZCBtaXNzaW5nIHRyYW5zbGF0aW9uIHN0cmF0ZWdpZXMuXG4gKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxvY2FsaXplZCBzdHJpbmcgZm9yIHRoZSBhY3Rpb24gb3IgbnVsbCBpZiBubyBhcHByb3ByaWF0ZSB0cmFuc2xhdGlvbiBpcyBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5Gb3JBY3Rpb25Bc3luYyhcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+LFxuICAgIHBhdGhLZXlzOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+LFxuICAgIG9wdHM/OiBBY3Rpb25JMThuT3B0c1R5cGVcbik6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiBnZXRJMThuQWN0aW9uUGFyYW1zQXN5bmModHJhbnNsYXRlLCBhY3Rpb24sIG9wdHM/Lml0ZW0sIG9wdHM/LnBhcmFtcykucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoaTE4blBhcmFtcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gZ2V0S2V5c0J5UHJpb3JpdHkoYWN0aW9uLCBwYXRoS2V5cywgb3B0cz8uY3VzdG9tS2V5LCBvcHRzPy5mYWxsYmFja0tleSk7XG4gICAgICAgICAgICByZXR1cm4gZ2V0STE4bkFzeW5jKHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaTE4blZhbHVlID0+IGdldFRyYW5zbGF0aW9uRGVwZW5kaW5nT25TdHJhdGVneShvcHRzPy5taXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSwge2kxOG5WYWx1ZSwgZmlyc3RLZXk6IGtleXNbMF0sIGZhbGxiYWNrS2V5OiBvcHRzPy5mYWxsYmFja0tleX0pKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJhbnNsYXRpb24gZGVwZW5kaW5nIG9uIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5XG4gKiBAcGFyYW0gbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3kgc3RyYXRlZ3kgd2hlbiBubyB0cmFuc2xhdGlvbiBpcyBmb3VuZFxuICogQHBhcmFtIHZhbHVlcyBvYmplY3Qgd2l0aCB2YWx1ZXMsIGkxOG5WYWx1ZSBpcyB0cmFuc2xhdGlvbiwgZmlyc3RLZXkgaXMgZmlyc3Qga2V5IGluIGFycmF5IG9mIGtleXMsIGZhbGxiYWNrS2V5IGlzIGZhbGxiYWNrIGtleVxuICovXG5mdW5jdGlvbiBnZXRUcmFuc2xhdGlvbkRlcGVuZGluZ09uU3RyYXRlZ3koXG4gICAgbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3k6IEkxOG5NaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSB8IHVuZGVmaW5lZCxcbiAgICB7aTE4blZhbHVlLCBmaXJzdEtleSwgZmFsbGJhY2tLZXl9OiB7aTE4blZhbHVlOiBzdHJpbmcgfCBudWxsOyBmaXJzdEtleT86IHN0cmluZzsgZmFsbGJhY2tLZXk/OiBzdHJpbmd9XG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoaTE4blZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBpMThuVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoIChtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSAncmV0dXJuTnVsbCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjYXNlICdyZXR1cm5GYWxsYmFja0tleSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrS2V5ID8/IG51bGw7XG4gICAgICAgICAgICBjYXNlICdyZXR1cm5GaXJzdEtleSc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdEtleSA/PyBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvblRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4sIGl0ZW0/OiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLCAndGl0bGUnLCB7aXRlbX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvbkVkaXRvclRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PGFueT4sIGl0ZW0/OiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLCBbJ2VkaXRvci50aXRsZScsICd0aXRsZSddLCB7Y3VzdG9tS2V5OiBhY3Rpb24uZWRpdG9yVGl0bGUgPz8gdW5kZWZpbmVkLCBpdGVtLCBwYXJhbXM6IGFjdGlvbi5lZGl0b3JUaXRsZVBhcmFtc30pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0STE4bkFjdGlvblBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgY29uc3QgaTE4blBhcmFtcyA9IGdldEkxOG5Nb2RlbFBhcmFtcyh0cmFuc2xhdGUsIGFjdGlvbi5tb2RlbCA/PyB1bmRlZmluZWQsIGl0ZW0sIHBhcmFtcyk7XG4gICAgcmV0dXJuIHBvcHVsYXRlSTE4bkFjdGlvblBhcmFtcyhpMThuUGFyYW1zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEkxOG5BY3Rpb25QYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIGdldEkxOG5Nb2RlbFBhcmFtc0FzeW5jKHRyYW5zbGF0ZSwgYWN0aW9uLm1vZGVsID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKS5waXBlKG1hcChpMThuUGFyYW1zID0+IHBvcHVsYXRlSTE4bkFjdGlvblBhcmFtcyhpMThuUGFyYW1zKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVJMThuQWN0aW9uUGFyYW1zKHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgIHBhcmFtcyA9IHsuLi5wYXJhbXN9O1xuICAgIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIGdldEtleXNCeVByaW9yaXR5KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgYWN0aW9uUGF0aEtleXM6IHN0cmluZyB8IEFycmF5PHN0cmluZz4sIGN1c3RvbUtleT86IHN0cmluZywgZmFsbGJhY2tLZXk/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXlzID0gW107XG4gICAgaWYgKGN1c3RvbUtleSkge1xuICAgICAgICBrZXlzLnB1c2goY3VzdG9tS2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWN0aW9uUGF0aEtleXMpKSB7XG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5cyA9IFthY3Rpb25QYXRoS2V5c107XG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uUGF0aEtleXMuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24uaTE4bk1vZGVsQWN0aW9uQmFzZUtleSkga2V5cy5wdXNoKGAke2FjdGlvbi5pMThuTW9kZWxBY3Rpb25CYXNlS2V5fS4ke2t9YCk7XG4gICAgICAgICAgICBrZXlzLnB1c2goYCR7YWN0aW9uLmFjdGlvbk5hbWV9LiR7a31gKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChmYWxsYmFja0tleSkge1xuICAgICAgICAgICAga2V5cy5wdXNoKGZhbGxiYWNrS2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn1cbiJdfQ==