@kaspernj/api-maker 1.0.2160 → 1.0.2161

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 (524) hide show
  1. package/build/api.d.ts +46 -34
  2. package/build/api.d.ts.map +1 -1
  3. package/build/api.js +32 -25
  4. package/build/attribute-not-loaded-error.d.ts.map +1 -1
  5. package/build/attribute-not-loaded-error.js +2 -1
  6. package/build/base-error.d.ts +49 -60
  7. package/build/base-error.d.ts.map +1 -1
  8. package/build/base-error.js +3 -2
  9. package/build/base-model/column.d.ts +2 -2
  10. package/build/base-model/column.d.ts.map +1 -1
  11. package/build/base-model/column.js +3 -2
  12. package/build/base-model/reflection.d.ts +8 -3
  13. package/build/base-model/reflection.d.ts.map +1 -1
  14. package/build/base-model/reflection.js +8 -3
  15. package/build/base-model/scope.d.ts +1 -1
  16. package/build/base-model/scope.d.ts.map +1 -1
  17. package/build/base-model/scope.js +3 -2
  18. package/build/base-model.d.ts +3801 -117
  19. package/build/base-model.d.ts.map +1 -1
  20. package/build/base-model.js +271 -143
  21. package/build/bootstrap/attribute-row.d.ts +12 -0
  22. package/build/bootstrap/attribute-row.d.ts.map +1 -1
  23. package/build/bootstrap/attribute-row.js +23 -5
  24. package/build/bootstrap/attribute-rows.d.ts +8 -0
  25. package/build/bootstrap/attribute-rows.d.ts.map +1 -1
  26. package/build/bootstrap/attribute-rows.js +14 -5
  27. package/build/bootstrap/card.d.ts +17 -0
  28. package/build/bootstrap/card.d.ts.map +1 -1
  29. package/build/bootstrap/card.js +30 -10
  30. package/build/bootstrap/checkbox.d.ts +16 -0
  31. package/build/bootstrap/checkbox.d.ts.map +1 -1
  32. package/build/bootstrap/checkbox.js +20 -2
  33. package/build/bootstrap/checkboxes.d.ts +31 -0
  34. package/build/bootstrap/checkboxes.d.ts.map +1 -1
  35. package/build/bootstrap/checkboxes.js +35 -3
  36. package/build/bootstrap/index.js +2 -1
  37. package/build/bootstrap/input.d.ts +24 -0
  38. package/build/bootstrap/input.d.ts.map +1 -1
  39. package/build/bootstrap/input.js +27 -2
  40. package/build/bootstrap/invalid-feedback.d.ts.map +1 -1
  41. package/build/bootstrap/invalid-feedback.js +2 -1
  42. package/build/bootstrap/paginate.d.ts +5 -0
  43. package/build/bootstrap/paginate.d.ts.map +1 -1
  44. package/build/bootstrap/paginate.js +9 -4
  45. package/build/bootstrap/radio-buttons.js +2 -1
  46. package/build/bootstrap/select.js +2 -1
  47. package/build/bootstrap/sort-link.d.ts +10 -0
  48. package/build/bootstrap/sort-link.d.ts.map +1 -1
  49. package/build/bootstrap/sort-link.js +15 -4
  50. package/build/cable-connection-pool.d.ts +201 -24
  51. package/build/cable-connection-pool.d.ts.map +1 -1
  52. package/build/cable-connection-pool.js +76 -16
  53. package/build/cable-subscription-pool.d.ts +186 -20
  54. package/build/cable-subscription-pool.d.ts.map +1 -1
  55. package/build/cable-subscription-pool.js +61 -22
  56. package/build/cable-subscription.d.ts.map +1 -1
  57. package/build/cable-subscription.js +3 -2
  58. package/build/cache-key-generator.d.ts +194 -20
  59. package/build/cache-key-generator.d.ts.map +1 -1
  60. package/build/cache-key-generator.js +63 -12
  61. package/build/can-can.d.ts +146 -29
  62. package/build/can-can.d.ts.map +1 -1
  63. package/build/can-can.js +105 -19
  64. package/build/channels-consumer.d.ts +23 -1
  65. package/build/channels-consumer.d.ts.map +1 -1
  66. package/build/channels-consumer.js +26 -8
  67. package/build/collection-loader.js +2 -1
  68. package/build/collection.d.ts +361 -370
  69. package/build/collection.d.ts.map +1 -1
  70. package/build/collection.js +59 -19
  71. package/build/command-execution.d.ts +50 -26
  72. package/build/command-execution.d.ts.map +1 -1
  73. package/build/command-execution.js +31 -13
  74. package/build/command-submit-data.d.ts +50 -37
  75. package/build/command-submit-data.d.ts.map +1 -1
  76. package/build/command-submit-data.js +35 -22
  77. package/build/commands-pool.d.ts +65 -27
  78. package/build/commands-pool.d.ts.map +1 -1
  79. package/build/commands-pool.js +67 -20
  80. package/build/compose.d.ts +8 -2
  81. package/build/compose.d.ts.map +1 -1
  82. package/build/compose.js +9 -2
  83. package/build/config.d.ts +31 -15
  84. package/build/config.d.ts.map +1 -1
  85. package/build/config.js +60 -23
  86. package/build/custom-error.d.ts.map +1 -1
  87. package/build/custom-error.js +2 -1
  88. package/build/data-set-to-attributes.d.ts +14 -2
  89. package/build/data-set-to-attributes.d.ts.map +1 -1
  90. package/build/data-set-to-attributes.js +12 -3
  91. package/build/deserializer.d.ts +116 -2
  92. package/build/deserializer.d.ts.map +1 -1
  93. package/build/deserializer.js +13 -2
  94. package/build/destroy-error.d.ts.map +1 -1
  95. package/build/destroy-error.js +2 -1
  96. package/build/devise.d.ts +638 -39
  97. package/build/devise.d.ts.map +1 -1
  98. package/build/devise.js +97 -28
  99. package/build/draggable-sort/controller.d.ts +126 -35
  100. package/build/draggable-sort/controller.d.ts.map +1 -1
  101. package/build/draggable-sort/controller.js +100 -28
  102. package/build/draggable-sort/index.d.ts +55 -0
  103. package/build/draggable-sort/index.d.ts.map +1 -1
  104. package/build/draggable-sort/index.js +71 -3
  105. package/build/draggable-sort/item.d.ts +54 -0
  106. package/build/draggable-sort/item.d.ts.map +1 -1
  107. package/build/draggable-sort/item.js +94 -6
  108. package/build/error-logger.d.ts +30 -14
  109. package/build/error-logger.d.ts.map +1 -1
  110. package/build/error-logger.js +22 -11
  111. package/build/event-connection.d.ts.map +1 -1
  112. package/build/event-connection.js +3 -2
  113. package/build/event-emitter-listener.d.ts.map +1 -1
  114. package/build/event-emitter-listener.js +2 -1
  115. package/build/event-model-class.d.ts.map +1 -1
  116. package/build/event-model-class.js +2 -1
  117. package/build/events.d.ts.map +1 -1
  118. package/build/events.js +2 -1
  119. package/build/form.d.ts +23 -0
  120. package/build/form.d.ts.map +1 -1
  121. package/build/form.js +16 -4
  122. package/build/history-expo.d.ts +6 -2
  123. package/build/history-expo.d.ts.map +1 -1
  124. package/build/history-expo.js +5 -2
  125. package/build/history-react-native.d.ts +6 -2
  126. package/build/history-react-native.d.ts.map +1 -1
  127. package/build/history-react-native.js +5 -2
  128. package/build/history.js +2 -1
  129. package/build/index.d.ts.map +1 -1
  130. package/build/index.js +2 -1
  131. package/build/inputs/attachment.d.ts +11 -0
  132. package/build/inputs/attachment.d.ts.map +1 -1
  133. package/build/inputs/attachment.js +17 -4
  134. package/build/inputs/auto-submit.d.ts +41 -13
  135. package/build/inputs/auto-submit.d.ts.map +1 -1
  136. package/build/inputs/auto-submit.js +16 -4
  137. package/build/inputs/checkbox.d.ts +15 -0
  138. package/build/inputs/checkbox.d.ts.map +1 -1
  139. package/build/inputs/checkbox.js +22 -6
  140. package/build/inputs/checkboxes.d.ts +16 -0
  141. package/build/inputs/checkboxes.d.ts.map +1 -1
  142. package/build/inputs/checkboxes.js +20 -4
  143. package/build/inputs/id-for-component.d.ts +21 -2
  144. package/build/inputs/id-for-component.d.ts.map +1 -1
  145. package/build/inputs/id-for-component.js +9 -2
  146. package/build/inputs/input-wrapper.d.ts.map +1 -1
  147. package/build/inputs/input-wrapper.js +2 -1
  148. package/build/inputs/input.d.ts +36 -0
  149. package/build/inputs/input.d.ts.map +1 -1
  150. package/build/inputs/input.js +26 -7
  151. package/build/inputs/money.d.ts +2 -0
  152. package/build/inputs/money.d.ts.map +1 -1
  153. package/build/inputs/money.js +6 -3
  154. package/build/inputs/name-for-component.d.ts +21 -2
  155. package/build/inputs/name-for-component.d.ts.map +1 -1
  156. package/build/inputs/name-for-component.js +9 -2
  157. package/build/inputs/select.d.ts +33 -0
  158. package/build/inputs/select.d.ts.map +1 -1
  159. package/build/inputs/select.js +21 -4
  160. package/build/instance-of-class-name.d.ts +7 -2
  161. package/build/instance-of-class-name.d.ts.map +1 -1
  162. package/build/instance-of-class-name.js +8 -4
  163. package/build/is-expo.d.ts.map +1 -1
  164. package/build/is-expo.js +2 -1
  165. package/build/key-value-store.d.ts +24 -14
  166. package/build/key-value-store.d.ts.map +1 -1
  167. package/build/key-value-store.js +22 -12
  168. package/build/link.d.ts +30 -0
  169. package/build/link.d.ts.map +1 -1
  170. package/build/link.js +76 -30
  171. package/build/logger.d.ts +10 -6
  172. package/build/logger.d.ts.map +1 -1
  173. package/build/logger.js +7 -4
  174. package/build/merge-styles.d.ts +10 -2
  175. package/build/merge-styles.d.ts.map +1 -1
  176. package/build/merge-styles.js +10 -3
  177. package/build/modal.d.ts +2 -0
  178. package/build/modal.d.ts.map +1 -1
  179. package/build/modal.js +6 -4
  180. package/build/model-class-require.d.ts +4 -2
  181. package/build/model-class-require.d.ts.map +1 -1
  182. package/build/model-class-require.js +4 -2
  183. package/build/model-events.d.ts +139 -346
  184. package/build/model-events.d.ts.map +1 -1
  185. package/build/model-events.js +21 -9
  186. package/build/model-name.d.ts +21 -7
  187. package/build/model-name.d.ts.map +1 -1
  188. package/build/model-name.js +12 -2
  189. package/build/model-prop-type.d.ts +533 -26
  190. package/build/model-prop-type.d.ts.map +1 -1
  191. package/build/model-prop-type.js +69 -11
  192. package/build/model-recipes-loader.d.ts +7 -3
  193. package/build/model-recipes-loader.d.ts.map +1 -1
  194. package/build/model-recipes-loader.js +4 -2
  195. package/build/model-recipes-model-loader.d.ts +189 -1493
  196. package/build/model-recipes-model-loader.d.ts.map +1 -1
  197. package/build/model-recipes-model-loader.js +119 -17
  198. package/build/models-response-reader.d.ts +600 -195
  199. package/build/models-response-reader.d.ts.map +1 -1
  200. package/build/models-response-reader.js +12 -4
  201. package/build/models.d.ts +438 -1
  202. package/build/models.d.ts.map +1 -1
  203. package/build/models.js +2 -1
  204. package/build/money-formatter.d.ts +25 -31
  205. package/build/money-formatter.d.ts.map +1 -1
  206. package/build/money-formatter.js +11 -8
  207. package/build/not-loaded-error.d.ts.map +1 -1
  208. package/build/not-loaded-error.js +2 -1
  209. package/build/params.d.ts +25 -17
  210. package/build/params.d.ts.map +1 -1
  211. package/build/params.js +19 -15
  212. package/build/preloaded.d.ts +61 -64
  213. package/build/preloaded.d.ts.map +1 -1
  214. package/build/preloaded.js +10 -4
  215. package/build/reset-realtime-runtime-state.d.ts.map +1 -1
  216. package/build/reset-realtime-runtime-state.js +2 -1
  217. package/build/resize-observer.d.ts.map +1 -1
  218. package/build/resize-observer.js +2 -1
  219. package/build/rest-props-validator.d.ts +2 -2
  220. package/build/rest-props-validator.d.ts.map +1 -1
  221. package/build/rest-props-validator.js +3 -2
  222. package/build/result.d.ts +142 -175
  223. package/build/result.d.ts.map +1 -1
  224. package/build/result.js +3 -2
  225. package/build/router/route.d.ts +50 -0
  226. package/build/router/route.d.ts.map +1 -1
  227. package/build/router/route.js +39 -10
  228. package/build/router/switch.d.ts +37 -1
  229. package/build/router/switch.d.ts.map +1 -1
  230. package/build/router/switch.js +29 -7
  231. package/build/router.d.ts +20 -0
  232. package/build/router.d.ts.map +1 -1
  233. package/build/router.js +15 -4
  234. package/build/routes-native.d.ts +13 -13
  235. package/build/routes-native.d.ts.map +1 -1
  236. package/build/routes-native.js +23 -11
  237. package/build/routes.d.ts +17 -9
  238. package/build/routes.d.ts.map +1 -1
  239. package/build/routes.js +7 -2
  240. package/build/run-last.d.ts.map +1 -1
  241. package/build/run-last.js +2 -1
  242. package/build/serializer.d.ts +44 -12
  243. package/build/serializer.d.ts.map +1 -1
  244. package/build/serializer.js +36 -7
  245. package/build/services.d.ts +29 -4
  246. package/build/services.d.ts.map +1 -1
  247. package/build/services.js +16 -4
  248. package/build/session-status-updater.d.ts +73 -25
  249. package/build/session-status-updater.d.ts.map +1 -1
  250. package/build/session-status-updater.js +52 -14
  251. package/build/source-maps-loader.d.ts +88 -33
  252. package/build/source-maps-loader.d.ts.map +1 -1
  253. package/build/source-maps-loader.js +74 -18
  254. package/build/super-admin/config-reader.d.ts.map +1 -1
  255. package/build/super-admin/config-reader.js +11 -16
  256. package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts +10 -0
  257. package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts.map +1 -1
  258. package/build/super-admin/edit-page/edit-attribute-checkbox.js +16 -4
  259. package/build/super-admin/edit-page/edit-attribute-content.d.ts +9 -0
  260. package/build/super-admin/edit-page/edit-attribute-content.d.ts.map +1 -1
  261. package/build/super-admin/edit-page/edit-attribute-content.js +15 -4
  262. package/build/super-admin/edit-page/edit-attribute-input.d.ts +8 -0
  263. package/build/super-admin/edit-page/edit-attribute-input.d.ts.map +1 -1
  264. package/build/super-admin/edit-page/edit-attribute-input.js +13 -4
  265. package/build/super-admin/edit-page/edit-attribute.d.ts +6 -0
  266. package/build/super-admin/edit-page/edit-attribute.d.ts.map +1 -1
  267. package/build/super-admin/edit-page/edit-attribute.js +11 -4
  268. package/build/super-admin/edit-page.d.ts +5 -0
  269. package/build/super-admin/edit-page.d.ts.map +1 -1
  270. package/build/super-admin/edit-page.js +11 -5
  271. package/build/super-admin/has-edit-config.d.ts.map +1 -1
  272. package/build/super-admin/has-edit-config.js +2 -1
  273. package/build/super-admin/index-page.d.ts +4 -0
  274. package/build/super-admin/index-page.d.ts.map +1 -1
  275. package/build/super-admin/index-page.js +9 -4
  276. package/build/super-admin/index.d.ts +4 -0
  277. package/build/super-admin/index.d.ts.map +1 -1
  278. package/build/super-admin/index.js +12 -6
  279. package/build/super-admin/layout/header/index.d.ts +4 -0
  280. package/build/super-admin/layout/header/index.d.ts.map +1 -1
  281. package/build/super-admin/layout/header/index.js +13 -8
  282. package/build/super-admin/layout/index.d.ts +24 -0
  283. package/build/super-admin/layout/index.d.ts.map +1 -1
  284. package/build/super-admin/layout/index.js +33 -5
  285. package/build/super-admin/layout/menu/index.d.ts +2 -0
  286. package/build/super-admin/layout/menu/index.d.ts.map +1 -1
  287. package/build/super-admin/layout/menu/index.js +8 -6
  288. package/build/super-admin/layout/menu/menu-content.d.ts +2 -0
  289. package/build/super-admin/layout/menu/menu-content.d.ts.map +1 -1
  290. package/build/super-admin/layout/menu/menu-content.js +6 -4
  291. package/build/super-admin/layout/menu/menu-item.d.ts +9 -0
  292. package/build/super-admin/layout/menu/menu-item.d.ts.map +1 -1
  293. package/build/super-admin/layout/menu/menu-item.js +15 -4
  294. package/build/super-admin/layout/no-access.d.ts +2 -0
  295. package/build/super-admin/layout/no-access.d.ts.map +1 -1
  296. package/build/super-admin/layout/no-access.js +7 -5
  297. package/build/super-admin/model-class-table.d.ts +4 -0
  298. package/build/super-admin/model-class-table.d.ts.map +1 -1
  299. package/build/super-admin/model-class-table.js +9 -4
  300. package/build/super-admin/models.d.ts.map +1 -1
  301. package/build/super-admin/models.js +2 -1
  302. package/build/super-admin/show-nav.d.ts +2 -0
  303. package/build/super-admin/show-nav.d.ts.map +1 -1
  304. package/build/super-admin/show-nav.js +6 -4
  305. package/build/super-admin/show-page/belongs-to-attribute-row.d.ts +17 -1
  306. package/build/super-admin/show-page/belongs-to-attribute-row.d.ts.map +1 -1
  307. package/build/super-admin/show-page/belongs-to-attribute-row.js +14 -5
  308. package/build/super-admin/show-page/index.d.ts +4 -0
  309. package/build/super-admin/show-page/index.d.ts.map +1 -1
  310. package/build/super-admin/show-page/index.js +9 -4
  311. package/build/super-admin/show-reflection-actions.d.ts +6 -0
  312. package/build/super-admin/show-reflection-actions.d.ts.map +1 -1
  313. package/build/super-admin/show-reflection-actions.js +11 -4
  314. package/build/super-admin/show-reflection-link.d.ts +4 -0
  315. package/build/super-admin/show-reflection-link.d.ts.map +1 -1
  316. package/build/super-admin/show-reflection-link.js +9 -4
  317. package/build/super-admin/show-reflection-page.d.ts +5 -0
  318. package/build/super-admin/show-reflection-page.d.ts.map +1 -1
  319. package/build/super-admin/show-reflection-page.js +10 -4
  320. package/build/table/column-content.d.ts +155 -19
  321. package/build/table/column-content.d.ts.map +1 -1
  322. package/build/table/column-content.js +55 -12
  323. package/build/table/column-identifier.d.ts +11 -2
  324. package/build/table/column-identifier.d.ts.map +1 -1
  325. package/build/table/column-identifier.js +7 -2
  326. package/build/table/column-visible.d.ts +11 -2
  327. package/build/table/column-visible.d.ts.map +1 -1
  328. package/build/table/column-visible.js +8 -2
  329. package/build/table/components/column.d.ts +2 -0
  330. package/build/table/components/column.d.ts.map +1 -1
  331. package/build/table/components/column.js +6 -4
  332. package/build/table/components/flat-list.d.ts +2 -0
  333. package/build/table/components/flat-list.d.ts.map +1 -1
  334. package/build/table/components/flat-list.js +6 -4
  335. package/build/table/components/header.d.ts +2 -0
  336. package/build/table/components/header.d.ts.map +1 -1
  337. package/build/table/components/header.js +6 -4
  338. package/build/table/components/row.d.ts +2 -0
  339. package/build/table/components/row.d.ts.map +1 -1
  340. package/build/table/components/row.js +6 -4
  341. package/build/table/filters/attribute-element.d.ts +2 -0
  342. package/build/table/filters/attribute-element.d.ts.map +1 -1
  343. package/build/table/filters/attribute-element.js +7 -7
  344. package/build/table/filters/filter-form.d.ts +58 -0
  345. package/build/table/filters/filter-form.d.ts.map +1 -1
  346. package/build/table/filters/filter-form.js +72 -9
  347. package/build/table/filters/filter.d.ts +2 -0
  348. package/build/table/filters/filter.d.ts.map +1 -1
  349. package/build/table/filters/filter.js +6 -4
  350. package/build/table/filters/index.d.ts +127 -0
  351. package/build/table/filters/index.d.ts.map +1 -1
  352. package/build/table/filters/index.js +21 -4
  353. package/build/table/filters/load-search-modal.d.ts +130 -0
  354. package/build/table/filters/load-search-modal.d.ts.map +1 -1
  355. package/build/table/filters/load-search-modal.js +28 -6
  356. package/build/table/filters/reflection-element.d.ts +2 -0
  357. package/build/table/filters/reflection-element.d.ts.map +1 -1
  358. package/build/table/filters/reflection-element.js +6 -4
  359. package/build/table/filters/save-search-modal.d.ts +134 -0
  360. package/build/table/filters/save-search-modal.d.ts.map +1 -1
  361. package/build/table/filters/save-search-modal.js +36 -5
  362. package/build/table/filters/scope-element.d.ts +6 -0
  363. package/build/table/filters/scope-element.d.ts.map +1 -1
  364. package/build/table/filters/scope-element.js +13 -8
  365. package/build/table/header-column-content.d.ts +7 -0
  366. package/build/table/header-column-content.d.ts.map +1 -1
  367. package/build/table/header-column-content.js +12 -4
  368. package/build/table/header-column.d.ts +50 -0
  369. package/build/table/header-column.d.ts.map +1 -1
  370. package/build/table/header-column.js +32 -5
  371. package/build/table/header-select.d.ts +18 -0
  372. package/build/table/header-select.d.ts.map +1 -1
  373. package/build/table/header-select.js +19 -4
  374. package/build/table/model-callback-args.d.ts +116 -3
  375. package/build/table/model-callback-args.d.ts.map +1 -1
  376. package/build/table/model-callback-args.js +10 -3
  377. package/build/table/model-column.d.ts +136 -0
  378. package/build/table/model-column.d.ts.map +1 -1
  379. package/build/table/model-column.js +27 -4
  380. package/build/table/model-row.d.ts +19 -0
  381. package/build/table/model-row.d.ts.map +1 -1
  382. package/build/table/model-row.js +24 -4
  383. package/build/table/select-calculator.d.ts +37 -2
  384. package/build/table/select-calculator.d.ts.map +1 -1
  385. package/build/table/select-calculator.js +29 -6
  386. package/build/table/settings/column-row.d.ts +6 -0
  387. package/build/table/settings/column-row.d.ts.map +1 -1
  388. package/build/table/settings/column-row.js +13 -12
  389. package/build/table/settings/download-action.d.ts +5 -0
  390. package/build/table/settings/download-action.d.ts.map +1 -1
  391. package/build/table/settings/download-action.js +10 -4
  392. package/build/table/settings/index.d.ts +5 -0
  393. package/build/table/settings/index.d.ts.map +1 -1
  394. package/build/table/settings/index.js +10 -4
  395. package/build/table/should-render-loading-content.d.ts +2 -2
  396. package/build/table/should-render-loading-content.d.ts.map +1 -1
  397. package/build/table/should-render-loading-content.js +3 -2
  398. package/build/table/table-settings.d.ts +236 -43
  399. package/build/table/table-settings.d.ts.map +1 -1
  400. package/build/table/table-settings.js +104 -20
  401. package/build/table/table.d.ts +271 -0
  402. package/build/table/table.d.ts.map +1 -1
  403. package/build/table/table.js +167 -16
  404. package/build/table/use-sorting.d.ts +10 -8
  405. package/build/table/use-sorting.d.ts.map +1 -1
  406. package/build/table/use-sorting.js +16 -8
  407. package/build/table/widths.d.ts +55 -8
  408. package/build/table/widths.d.ts.map +1 -1
  409. package/build/table/widths.js +25 -2
  410. package/build/table/worker-plugins-check-all-checkbox.d.ts +18 -0
  411. package/build/table/worker-plugins-check-all-checkbox.d.ts.map +1 -1
  412. package/build/table/worker-plugins-check-all-checkbox.js +25 -5
  413. package/build/table/worker-plugins-checkbox.d.ts +5 -0
  414. package/build/table/worker-plugins-checkbox.d.ts.map +1 -1
  415. package/build/table/worker-plugins-checkbox.js +10 -4
  416. package/build/translated-attributes.d.ts +7 -2
  417. package/build/translated-attributes.d.ts.map +1 -1
  418. package/build/translated-attributes.js +8 -2
  419. package/build/translated-collections.d.ts +11 -2
  420. package/build/translated-collections.d.ts.map +1 -1
  421. package/build/translated-collections.js +9 -3
  422. package/build/updated-attribute.d.ts.map +1 -1
  423. package/build/updated-attribute.js +2 -1
  424. package/build/url-encode.d.ts.map +1 -1
  425. package/build/url-encode.js +2 -1
  426. package/build/use-can-can.d.ts +2 -2
  427. package/build/use-can-can.d.ts.map +1 -1
  428. package/build/use-can-can.js +27 -12
  429. package/build/use-collection.d.ts +167 -121
  430. package/build/use-collection.d.ts.map +1 -1
  431. package/build/use-collection.js +113 -44
  432. package/build/use-created-event.d.ts +120 -11
  433. package/build/use-created-event.d.ts.map +1 -1
  434. package/build/use-created-event.js +10 -7
  435. package/build/use-current-user-context.d.ts +2 -2
  436. package/build/use-current-user-context.d.ts.map +1 -1
  437. package/build/use-current-user-context.js +3 -2
  438. package/build/use-current-user.d.ts +86 -70
  439. package/build/use-current-user.d.ts.map +1 -1
  440. package/build/use-current-user.js +36 -8
  441. package/build/use-destroyed-event.d.ts +117 -8
  442. package/build/use-destroyed-event.d.ts.map +1 -1
  443. package/build/use-destroyed-event.js +29 -22
  444. package/build/use-input.d.ts +74 -12
  445. package/build/use-input.d.ts.map +1 -1
  446. package/build/use-input.js +33 -5
  447. package/build/use-model-class-event.d.ts +124 -10
  448. package/build/use-model-class-event.d.ts.map +1 -1
  449. package/build/use-model-class-event.js +26 -16
  450. package/build/use-model-event.d.ts +121 -8
  451. package/build/use-model-event.d.ts.map +1 -1
  452. package/build/use-model-event.js +24 -19
  453. package/build/use-model.d.ts +162 -244
  454. package/build/use-model.d.ts.map +1 -1
  455. package/build/use-model.js +85 -32
  456. package/build/use-resize-observer.d.ts.map +1 -1
  457. package/build/use-resize-observer.js +2 -1
  458. package/build/use-router.d.ts.map +1 -1
  459. package/build/use-router.js +2 -1
  460. package/build/use-screen-layout.d.ts +7 -2
  461. package/build/use-screen-layout.d.ts.map +1 -1
  462. package/build/use-screen-layout.js +8 -5
  463. package/build/use-shape.js +2 -1
  464. package/build/use-styles.d.ts +11 -5
  465. package/build/use-styles.d.ts.map +1 -1
  466. package/build/use-styles.js +16 -9
  467. package/build/use-updated-event.d.ts +66 -182
  468. package/build/use-updated-event.d.ts.map +1 -1
  469. package/build/use-updated-event.js +22 -18
  470. package/build/use-validation-errors.d.ts.map +1 -1
  471. package/build/use-validation-errors.js +2 -1
  472. package/build/utils/button.d.ts +14 -0
  473. package/build/utils/button.d.ts.map +1 -1
  474. package/build/utils/button.js +24 -7
  475. package/build/utils/card.d.ts +9 -0
  476. package/build/utils/card.d.ts.map +1 -1
  477. package/build/utils/card.js +13 -2
  478. package/build/utils/checkbox.d.ts +12 -0
  479. package/build/utils/checkbox.d.ts.map +1 -1
  480. package/build/utils/checkbox.js +18 -4
  481. package/build/utils/checkboxes.d.ts +25 -0
  482. package/build/utils/checkboxes.d.ts.map +1 -1
  483. package/build/utils/checkboxes.js +29 -3
  484. package/build/utils/default-style.d.ts +10 -4
  485. package/build/utils/default-style.d.ts.map +1 -1
  486. package/build/utils/default-style.js +12 -4
  487. package/build/utils/header.d.ts +6 -1
  488. package/build/utils/header.d.ts.map +1 -1
  489. package/build/utils/header.js +4 -2
  490. package/build/utils/icon.d.ts +7 -6
  491. package/build/utils/icon.d.ts.map +1 -1
  492. package/build/utils/icon.js +12 -11
  493. package/build/utils/invalid-feedback.d.ts +4 -0
  494. package/build/utils/invalid-feedback.d.ts.map +1 -1
  495. package/build/utils/invalid-feedback.js +8 -2
  496. package/build/utils/modal.d.ts +2 -0
  497. package/build/utils/modal.d.ts.map +1 -1
  498. package/build/utils/modal.js +9 -7
  499. package/build/utils/text.d.ts +8 -1
  500. package/build/utils/text.d.ts.map +1 -1
  501. package/build/utils/text.js +9 -2
  502. package/build/validation-error.d.ts +5 -2
  503. package/build/validation-error.d.ts.map +1 -1
  504. package/build/validation-error.js +5 -2
  505. package/build/validation-errors.d.ts +57 -15
  506. package/build/validation-errors.d.ts.map +1 -1
  507. package/build/validation-errors.js +37 -8
  508. package/build/websocket-request-client.d.ts +61 -15
  509. package/build/websocket-request-client.d.ts.map +1 -1
  510. package/build/websocket-request-client.js +35 -9
  511. package/build/with-api-maker.d.ts.map +1 -1
  512. package/build/with-api-maker.js +2 -1
  513. package/build/with-collection.d.ts.map +1 -1
  514. package/build/with-collection.js +2 -1
  515. package/build/with-current-user.d.ts.map +1 -1
  516. package/build/with-current-user.js +2 -1
  517. package/build/with-model.d.ts.map +1 -1
  518. package/build/with-model.js +2 -1
  519. package/build/with-router.d.ts.map +1 -1
  520. package/build/with-router.js +2 -1
  521. package/package.json +4 -3
  522. package/build/base-component.d.ts +0 -5
  523. package/build/base-component.d.ts.map +0 -1
  524. package/build/base-component.js +0 -4
@@ -1 +1 @@
1
- {"version":3,"file":"model-recipes-model-loader.d.ts","sourceRoot":"/src/","sources":["model-recipes-model-loader.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-recipes-model-loader.d.ts","sourceRoot":"/src/","sources":["model-recipes-model-loader.js"],"names":[],"mappings":"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"}
@@ -1,17 +1,62 @@
1
+ // @ts-check
1
2
  import * as inflection from "inflection";
2
3
  import { digg, digs } from "diggerize";
3
4
  import BaseModel from "./base-model.js";
4
5
  import Collection from "./collection.js";
6
+ /** @typedef {import("./model-recipes-loader.js").default} ModelRecipesLoaderLike */
7
+ /** @typedef {typeof import("./base-model.js").default} ModelClassLike */
8
+ /** @typedef {ModelClassLike & {modelClassData: () => ModelRecipeClassData}} ModelClassWithData */
9
+ /** @typedef {Record<string, {name: string}>} ModelRecipeAttributes */
10
+ /** @typedef {Record<string, {args?: Record<string, object | string | number | boolean | null | undefined>}>} ModelRecipeCommands */
11
+ /**
12
+ * @typedef {object} ModelRecipeClassData
13
+ * @property {string} className
14
+ * @property {string} collectionName
15
+ * @property {string} name
16
+ * @property {string} primaryKey
17
+ */
18
+ /**
19
+ * @typedef {object} RelationshipOptions
20
+ * @property {string} [as]
21
+ * @property {string} [primary_key]
22
+ * @property {string} [through]
23
+ */
24
+ /**
25
+ * @typedef {object} RelationshipDefinition
26
+ * @property {{name: string, primary_key: string}} active_record
27
+ * @property {string} class_name
28
+ * @property {string} foreign_key
29
+ * @property {{primary_key: string}} klass
30
+ * @property {RelationshipOptions} options
31
+ * @property {string} resource_name
32
+ * @property {"belongs_to" | "has_many" | "has_one"} type
33
+ */
34
+ /**
35
+ * @typedef {object} ModelRecipe
36
+ * @property {ModelRecipeAttributes} attributes
37
+ * @property {ModelRecipeCommands} collection_commands
38
+ * @property {ModelRecipeCommands} member_commands
39
+ * @property {ModelRecipeClassData} model_class_data
40
+ * @property {Record<string, RelationshipDefinition>} relationships
41
+ */
5
42
  /** Builds runtime model classes from recipe definitions. */
6
43
  export default class ApiMakerModelRecipesModelLoader {
7
- /** Constructor. */
44
+ /**
45
+ * Constructor.
46
+ * @param {object} root0
47
+ * @param {ModelRecipe} root0.modelRecipe
48
+ * @param {ModelRecipesLoaderLike} root0.modelRecipesLoader
49
+ */
8
50
  constructor({ modelRecipe, modelRecipesLoader }) {
9
51
  if (!modelRecipe)
10
52
  throw new Error("No 'modelRecipe' was given");
11
53
  this.modelRecipesLoader = modelRecipesLoader;
12
54
  this.modelRecipe = modelRecipe;
13
55
  }
14
- /** createClass. */
56
+ /**
57
+ * createClass.
58
+ * @returns {ModelClassLike}
59
+ */
15
60
  createClass() {
16
61
  const { modelRecipe } = digs(this, "modelRecipe");
17
62
  const { attributes, collection_commands: collectionCommands, member_commands: memberCommands, model_class_data: modelClassData, relationships } = digs(modelRecipe, "attributes", "collection_commands", "member_commands", "model_class_data", "relationships");
@@ -19,7 +64,7 @@ export default class ApiMakerModelRecipesModelLoader {
19
64
  const ModelClass = class ApiMakerModel extends BaseModel {
20
65
  };
21
66
  Object.defineProperty(ModelClass, "name", { writable: false, value: modelClassName });
22
- const modelClassConstructor = /** @type {any} */ (ModelClass.prototype.constructor);
67
+ const modelClassConstructor = /** @type {ModelClassWithData} */ (ModelClass.prototype.constructor);
23
68
  modelClassConstructor.modelClassData = () => modelClassData;
24
69
  this.addAttributeMethodsToModelClass(ModelClass, attributes);
25
70
  this.addRelationshipsToModelClass(ModelClass, modelClassData, relationships);
@@ -27,7 +72,11 @@ export default class ApiMakerModelRecipesModelLoader {
27
72
  this.addMemberCommandsToModelClass(ModelClass, memberCommands);
28
73
  return ModelClass;
29
74
  }
30
- /** addAttributeMethodsToModelClass. */
75
+ /**
76
+ * addAttributeMethodsToModelClass.
77
+ * @param {ModelClassLike} ModelClass
78
+ * @param {ModelRecipeAttributes} attributes
79
+ */
31
80
  addAttributeMethodsToModelClass(ModelClass, attributes) {
32
81
  for (const attributeName in attributes) {
33
82
  const attribute = attributes[attributeName];
@@ -43,7 +92,11 @@ export default class ApiMakerModelRecipesModelLoader {
43
92
  };
44
93
  }
45
94
  }
46
- /** addQueryCommandsToModelClass. */
95
+ /**
96
+ * addQueryCommandsToModelClass.
97
+ * @param {ModelClassLike} ModelClass
98
+ * @param {ModelRecipeCommands} collectionCommands
99
+ */
47
100
  addQueryCommandsToModelClass(ModelClass, collectionCommands) {
48
101
  for (const collectionCommandName in collectionCommands) {
49
102
  const methodName = inflection.camelize(collectionCommandName, true);
@@ -58,7 +111,11 @@ export default class ApiMakerModelRecipesModelLoader {
58
111
  };
59
112
  }
60
113
  }
61
- /** addMemberCommandsToModelClass. */
114
+ /**
115
+ * addMemberCommandsToModelClass.
116
+ * @param {ModelClassLike} ModelClass
117
+ * @param {ModelRecipeCommands} memberCommands
118
+ */
62
119
  addMemberCommandsToModelClass(ModelClass, memberCommands) {
63
120
  for (const memberCommandName in memberCommands) {
64
121
  const methodName = inflection.camelize(memberCommandName, true);
@@ -74,7 +131,12 @@ export default class ApiMakerModelRecipesModelLoader {
74
131
  };
75
132
  }
76
133
  }
77
- /** addRelationshipsToModelClass. */
134
+ /**
135
+ * addRelationshipsToModelClass.
136
+ * @param {ModelClassLike} ModelClass
137
+ * @param {ModelRecipeClassData} modelClassData
138
+ * @param {Record<string, RelationshipDefinition>} relationships
139
+ */
78
140
  addRelationshipsToModelClass(ModelClass, modelClassData, relationships) {
79
141
  const { modelRecipesLoader } = digs(this, "modelRecipesLoader");
80
142
  for (const relationshipName in relationships) {
@@ -143,19 +205,42 @@ export default class ApiMakerModelRecipesModelLoader {
143
205
  }
144
206
  }
145
207
  }
146
- /** defineEnsureAssociationLoadedMethod. */
208
+ /**
209
+ * defineEnsureAssociationLoadedMethod.
210
+ * @param {object} root0
211
+ * @param {string} root0.ensureMethodName
212
+ * @param {ModelClassLike} root0.ModelClass
213
+ * @param {string} root0.relationshipName
214
+ */
147
215
  defineEnsureAssociationLoadedMethod({ ensureMethodName, ModelClass, relationshipName }) {
148
216
  ModelClass.prototype[ensureMethodName] = function () {
149
217
  return this.ensureAssociationLoaded(relationshipName);
150
218
  };
151
219
  }
152
- /** defineBelongsToGetMethod. */
220
+ /**
221
+ * defineBelongsToGetMethod.
222
+ * @param {object} root0
223
+ * @param {ModelClassLike} root0.ModelClass
224
+ * @param {string} root0.modelMethodName
225
+ * @param {string} root0.relationshipName
226
+ */
153
227
  defineBelongsToGetMethod({ ModelClass, modelMethodName, relationshipName }) {
154
228
  ModelClass.prototype[modelMethodName] = function () {
155
229
  return this._readBelongsToReflection({ reflectionName: relationshipName });
156
230
  };
157
231
  }
158
- /** defineBelongsToLoadMethod. */
232
+ /**
233
+ * defineBelongsToLoadMethod.
234
+ * @param {object} root0
235
+ * @param {string} root0.foreignKey
236
+ * @param {string} root0.klassPrimaryKey
237
+ * @param {ModelClassLike} root0.ModelClass
238
+ * @param {ModelRecipesLoaderLike} root0.modelRecipesLoader
239
+ * @param {string} root0.loadMethodName
240
+ * @param {string | undefined} root0.optionsPrimaryKey
241
+ * @param {string} root0.relationshipName
242
+ * @param {string} root0.resourceName
243
+ */
159
244
  defineBelongsToLoadMethod({ foreignKey, klassPrimaryKey, ModelClass, modelRecipesLoader, loadMethodName, optionsPrimaryKey, relationshipName, resourceName }) {
160
245
  ModelClass.prototype[loadMethodName] = function () {
161
246
  const foreignKeyMethodName = inflection.camelize(foreignKey, true);
@@ -163,7 +248,7 @@ export default class ApiMakerModelRecipesModelLoader {
163
248
  throw new Error(`Foreign key method wasn't defined: ${foreignKeyMethodName}`);
164
249
  const id = this[foreignKeyMethodName]();
165
250
  const modelClass = modelRecipesLoader.getModelClass(resourceName);
166
- const ransack = {};
251
+ const ransack = /** @type {import("./collection.js").CollectionRansackParams} */ ({});
167
252
  const ransackIdSearchKey = `${optionsPrimaryKey || klassPrimaryKey}_eq`;
168
253
  ransack[ransackIdSearchKey] = id;
169
254
  return this._loadBelongsToReflection({ reflectionName: relationshipName, model: this, modelClass }, { ransack });
@@ -194,7 +279,7 @@ export default class ApiMakerModelRecipesModelLoader {
194
279
  };
195
280
  }
196
281
  else {
197
- const ransack = {};
282
+ const ransack = /** @type {import("./collection.js").CollectionRansackParams} */ ({});
198
283
  const primaryKeyColumnName = optionsPrimaryKey || digg(ModelClass.modelClassData(), "primaryKey");
199
284
  const primaryKeyMethodName = inflection.camelize(primaryKeyColumnName, true);
200
285
  if (!(primaryKeyMethodName in this))
@@ -208,7 +293,18 @@ export default class ApiMakerModelRecipesModelLoader {
208
293
  return new Collection(hasManyParameters, queryParameters);
209
294
  };
210
295
  }
211
- /** defineHasManyLoadMethod. */
296
+ /**
297
+ * defineHasManyLoadMethod.
298
+ * @param {object} root0
299
+ * @param {string} root0.foreignKey
300
+ * @param {string} root0.loadMethodName
301
+ * @param {ModelClassLike} root0.ModelClass
302
+ * @param {ModelRecipeClassData} root0.modelClassData
303
+ * @param {ModelRecipesLoaderLike} root0.modelRecipesLoader
304
+ * @param {string | undefined} root0.optionsThrough
305
+ * @param {string} root0.relationshipName
306
+ * @param {string} root0.resourceName
307
+ */
212
308
  defineHasManyLoadMethod({ foreignKey, loadMethodName, ModelClass, modelClassData, modelRecipesLoader, optionsThrough, relationshipName, resourceName }) {
213
309
  ModelClass.prototype[loadMethodName] = function () {
214
310
  const id = this.primaryKey();
@@ -230,7 +326,7 @@ export default class ApiMakerModelRecipesModelLoader {
230
326
  });
231
327
  }
232
328
  else {
233
- const ransack = {};
329
+ const ransack = /** @type {import("./collection.js").CollectionRansackParams} */ ({});
234
330
  ransack[`${foreignKey}_eq`] = id;
235
331
  return this._loadHasManyReflection({
236
332
  reflectionName: relationshipName,
@@ -240,7 +336,13 @@ export default class ApiMakerModelRecipesModelLoader {
240
336
  }
241
337
  };
242
338
  }
243
- /** defineHasOneGetMethd. */
339
+ /**
340
+ * defineHasOneGetMethd.
341
+ * @param {object} root0
342
+ * @param {ModelClassLike} root0.ModelClass
343
+ * @param {string} root0.modelMethodName
344
+ * @param {string} root0.relationshipName
345
+ */
244
346
  defineHasOneGetMethd({ ModelClass, modelMethodName, relationshipName }) {
245
347
  ModelClass.prototype[modelMethodName] = function () {
246
348
  return this._readHasOneReflection({ reflectionName: relationshipName });
@@ -258,7 +360,7 @@ export default class ApiMakerModelRecipesModelLoader {
258
360
  return this._loadHasOneReflection({ reflectionName: relationshipName, model: this, modelClass }, { params: { through: { model: modelClassName, id, reflection: relationshipName } } });
259
361
  }
260
362
  else {
261
- const ransack = {};
363
+ const ransack = /** @type {import("./collection.js").CollectionRansackParams} */ ({});
262
364
  ransack[`${foreignKey}_eq`] = id;
263
365
  return this._loadHasOneReflection({
264
366
  reflectionName: relationshipName,
@@ -269,4 +371,4 @@ export default class ApiMakerModelRecipesModelLoader {
269
371
  };
270
372
  }
271
373
  }
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcmVjaXBlcy1tb2RlbC1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbIm1vZGVsLXJlY2lwZXMtbW9kZWwtbG9hZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ3BDLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBQ3ZDLE9BQU8sVUFBVSxNQUFNLGlCQUFpQixDQUFBO0FBRXhDLDREQUE0RDtBQUM1RCxNQUFNLENBQUMsT0FBTyxPQUFPLCtCQUErQjtJQUNsRCxtQkFBbUI7SUFDbkIsWUFBYSxFQUFDLFdBQVcsRUFBRSxrQkFBa0IsRUFBQztRQUM1QyxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtRQUUvRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUE7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7SUFDaEMsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixXQUFXO1FBQ1QsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDL0MsTUFBTSxFQUNKLFVBQVUsRUFDVixtQkFBbUIsRUFBRSxrQkFBa0IsRUFDdkMsZUFBZSxFQUFFLGNBQWMsRUFDL0IsZ0JBQWdCLEVBQUUsY0FBYyxFQUNoQyxhQUFhLEVBQ2QsR0FBRyxJQUFJLENBQ04sV0FBVyxFQUNYLFlBQVksRUFDWixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixlQUFlLENBQ2hCLENBQUE7UUFDRCxNQUFNLEVBQUMsSUFBSSxFQUFFLGNBQWMsRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFD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QUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUE7WUFDdkMsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBRWpFLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUE7Z0JBRXhELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUMvQixFQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxFQUMzRCxFQUFDLE1BQU0sRUFBRSxFQUFDLE9BQU8sRUFBRSxFQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBQyxFQUFDLEVBQUMsQ0FDL0UsQ0FBQTtZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7Z0JBRWxCLE9BQU8sQ0FBQyxHQUFHLFVBQVUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUVoQyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FDL0I7b0JBQ0UsY0FBYyxFQUFFLGdCQUFnQjtvQkFDaEMsS0FBSyxFQUFFLElBQUk7b0JBQ1gsVUFBVTtpQkFDWCxFQUNELEVBQUMsT0FBTyxFQUFDLENBQ1YsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7ZGlnZywgZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL2Jhc2UtbW9kZWwuanNcIlxuaW1wb3J0IENvbGxlY3Rpb24gZnJvbSBcIi4vY29sbGVjdGlvbi5qc1wiXG5cbi8qKiBCdWlsZHMgcnVudGltZSBtb2RlbCBjbGFzc2VzIGZyb20gcmVjaXBlIGRlZmluaXRpb25zLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJNb2RlbFJlY2lwZXNNb2RlbExvYWRlciB7XG4gIC8qKiBDb25zdHJ1Y3Rvci4gKi9cbiAgY29uc3RydWN0b3IgKHttb2RlbFJlY2lwZSwgbW9kZWxSZWNpcGVzTG9hZGVyfSkge1xuICAgIGlmICghbW9kZWxSZWNpcGUpIHRocm93IG5ldyBFcnJvcihcIk5vICdtb2RlbFJlY2lwZScgd2FzIGdpdmVuXCIpXG5cbiAgICB0aGlzLm1vZGVsUmVjaXBlc0xvYWRlciA9IG1vZGVsUmVjaXBlc0xvYWRlclxuICAgIHRoaXMubW9kZWxSZWNpcGUgPSBtb2RlbFJlY2lwZVxuICB9XG5cbiAgLyoqIGNyZWF0ZUNsYXNzLiAqL1xuICBjcmVhdGVDbGFzcyAoKSB7XG4gICAgY29uc3Qge21vZGVsUmVjaXBlfSA9IGRpZ3ModGhpcywgXCJtb2RlbFJlY2lwZVwiKVxuICAgIGNvbnN0IHtcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBjb2xsZWN0aW9uX2NvbW1hbmRzOiBjb2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgICBtZW1iZXJfY29tbWFuZHM6IG1lbWJlckNvbW1hbmRzLFxuICAgICAgbW9kZWxfY2xhc3NfZGF0YTogbW9kZWxDbGFzc0RhdGEsXG4gICAgICByZWxhdGlvbnNoaXBzXG4gICAgfSA9IGRpZ3MoXG4gICAgICBtb2RlbFJlY2lwZSxcbiAgICAgIFwiYXR0cmlidXRlc1wiLFxuICAgICAgXCJjb2xsZWN0aW9uX2NvbW1hbmRzXCIsXG4gICAgICBcIm1lbWJlcl9jb21tYW5kc1wiLFxuICAgICAgXCJtb2RlbF9jbGFzc19kYXRhXCIsXG4gICAgICBcInJlbGF0aW9uc2hpcHNcIlxuICAgIClcbiAgICBjb25zdCB7bmFtZTogbW9kZWxDbGFzc05hbWV9ID0gZGlncyhtb2RlbENsYXNzRGF0YSwgXCJuYW1lXCIpXG4gICAgY29uc3QgTW9kZWxDbGFzcyA9IGNsYXNzIEFwaU1ha2VyTW9kZWwgZXh0ZW5kcyBCYXNlTW9kZWwgeyB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICBNb2RlbENsYXNzLFxuICAgICAgXCJuYW1lXCIsXG4gICAgICB7d3JpdGFibGU6IGZhbHNlLCB2YWx1ZTogbW9kZWxDbGFzc05hbWV9XG4gICAgKVxuXG4gICAgY29uc3QgbW9kZWxDbGFzc0NvbnN0cnVjdG9yID0gLyoqIEB0eXBlIHthbnl9ICovIChNb2RlbENsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvcilcbiAgICBtb2RlbENsYXNzQ29uc3RydWN0b3IubW9kZWxDbGFzc0RhdGEgPSAoKSA9PiBtb2RlbENsYXNzRGF0YVxuXG4gICAgdGhpcy5hZGRBdHRyaWJ1dGVNZXRob2RzVG9Nb2RlbENsYXNzKE1vZGVsQ2xhc3MsIGF0dHJpYnV0ZXMpXG4gICAgdGhpcy5hZGRSZWxhdGlvbnNoaXBzVG9Nb2RlbENsYXNzKE1vZGVsQ2xhc3MsIG1vZGVsQ2xhc3NEYXRhLCByZWxhdGlvbnNoaXBzKVxuICAgIHRoaXMuYWRkUXVlcnlDb21tYW5kc1RvTW9kZWxDbGFzcyhNb2RlbENsYXNzLCBjb2xsZWN0aW9uQ29tbWFuZHMpXG4gICAgdGhpcy5hZGRNZW1iZXJDb21tYW5kc1RvTW9kZWxDbGFzcyhNb2RlbENsYXNzLCBtZW1iZXJDb21tYW5kcylcblxuICAgIHJldHVybiBNb2RlbENsYXNzXG4gIH1cblxuICAvKiogYWRkQXR0cmlidXRlTWV0aG9kc1RvTW9kZWxDbGFzcy4gKi9cbiAgYWRkQXR0cmlidXRlTWV0aG9kc1RvTW9kZWxDbGFzcyAoTW9kZWxDbGFzcywgYXR0cmlidXRlcykge1xuICAgIGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdXG4gICAgICBjb25zdCB7bmFtZX0gPSBkaWdzKGF0dHJpYnV0ZSwgXCJuYW1lXCIpXG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShuYW1lLCB0cnVlKVxuICAgICAgY29uc3QgaGFzTWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYGhhc18ke25hbWV9YCwgdHJ1ZSlcblxuICAgICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRBdHRyaWJ1dGVVbmRlcnNjb3JlKGF0dHJpYnV0ZU5hbWUpXG4gICAgICB9XG5cbiAgICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW2hhc01ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbbWV0aG9kTmFtZV0oKVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ByZXNlbnQodmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGFkZFF1ZXJ5Q29tbWFuZHNUb01vZGVsQ2xhc3MuICovXG4gIGFkZFF1ZXJ5Q29tbWFuZHNUb01vZGVsQ2xhc3MgKE1vZGVsQ2xhc3MsIGNvbGxlY3Rpb25Db21tYW5kcykge1xuICAgIGZvciAoY29uc3QgY29sbGVjdGlvbkNvbW1hbmROYW1lIGluIGNvbGxlY3Rpb25Db21tYW5kcykge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoY29sbGVjdGlvbkNvbW1hbmROYW1lLCB0cnVlKVxuICAgICAgY29uc3QgY29sbGVjdGlvbkNvbW1hbmQgPSBjb2xsZWN0aW9uQ29tbWFuZHNbY29sbGVjdGlvbkNvbW1hbmROYW1lXVxuXG4gICAgICBNb2RlbENsYXNzW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKGFyZ3MsIGNvbW1hbmRBcmdzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxDb2xsZWN0aW9uQ29tbWFuZChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgY29tbWFuZDogY29sbGVjdGlvbkNvbW1hbmROYW1lLFxuICAgICAgICAgICAgY29sbGVjdGlvbk5hbWU6IGRpZ2codGhpcy5tb2RlbENsYXNzRGF0YSgpLCBcImNvbGxlY3Rpb25OYW1lXCIpLFxuICAgICAgICAgICAgdHlwZTogXCJjb2xsZWN0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsuLi5kaWdnKGNvbGxlY3Rpb25Db21tYW5kLCBcImFyZ3NcIiksIC4uLmNvbW1hbmRBcmdzfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGFkZE1lbWJlckNvbW1hbmRzVG9Nb2RlbENsYXNzLiAqL1xuICBhZGRNZW1iZXJDb21tYW5kc1RvTW9kZWxDbGFzcyAoTW9kZWxDbGFzcywgbWVtYmVyQ29tbWFuZHMpIHtcbiAgICBmb3IgKGNvbnN0IG1lbWJlckNvbW1hbmROYW1lIGluIG1lbWJlckNvbW1hbmRzKSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShtZW1iZXJDb21tYW5kTmFtZSwgdHJ1ZSlcbiAgICAgIGNvbnN0IG1lbWJlckNvbW1hbmQgPSBtZW1iZXJDb21tYW5kc1ttZW1iZXJDb21tYW5kTmFtZV1cblxuICAgICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoYXJncywgY29tbWFuZEFyZ3MgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsbE1lbWJlckNvbW1hbmQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgIGNvbW1hbmQ6IG1lbWJlckNvbW1hbmROYW1lLFxuICAgICAgICAgICAgcHJpbWFyeUtleTogdGhpcy5wcmltYXJ5S2V5KCksXG4gICAgICAgICAgICBjb2xsZWN0aW9uTmFtZTogdGhpcy5tb2RlbENsYXNzRGF0YSgpLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgICAgICAgdHlwZTogXCJtZW1iZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgey4uLmRpZ2cobWVtYmVyQ29tbWFuZCwgXCJhcmdzXCIpLCAuLi5jb21tYW5kQXJnc31cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBhZGRSZWxhdGlvbnNoaXBzVG9Nb2RlbENsYXNzLiAqL1xuICBhZGRSZWxhdGlvbnNoaXBzVG9Nb2RlbENsYXNzIChNb2RlbENsYXNzLCBtb2RlbENsYXNzRGF0YSwgcmVsYXRpb25zaGlwcykge1xuICAgIGNvbnN0IHttb2RlbFJlY2lwZXNMb2FkZXJ9ID0gZGlncyh0aGlzLCBcIm1vZGVsUmVjaXBlc0xvYWRlclwiKVxuXG4gICAgZm9yIChjb25zdCByZWxhdGlvbnNoaXBOYW1lIGluIHJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcHNbcmVsYXRpb25zaGlwTmFtZV1cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWN0aXZlX3JlY29yZDoge1xuICAgICAgICAgIG5hbWU6IGFjdGl2ZVJlY29yZE5hbWUsXG4gICAgICAgICAgcHJpbWFyeV9rZXk6IGFjdGl2ZVJlY29yZFByaW1hcnlLZXlcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NfbmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBmb3JlaWduX2tleTogZm9yZWlnbktleSxcbiAgICAgICAga2xhc3M6IHtwcmltYXJ5X2tleToga2xhc3NQcmltYXJ5S2V5fSxcbiAgICAgICAgb3B0aW9uczoge2FzOiBvcHRpb25zQXMsIHByaW1hcnlfa2V5OiBvcHRpb25zUHJpbWFyeUtleSwgdGhyb3VnaDogb3B0aW9uc1Rocm91Z2h9LFxuICAgICAgICByZXNvdXJjZV9uYW1lOiByZXNvdXJjZU5hbWUsXG4gICAgICAgIHR5cGVcbiAgICAgIH0gPSBkaWdzKFxuICAgICAgICByZWxhdGlvbnNoaXAsXG4gICAgICAgIFwiYWN0aXZlX3JlY29yZFwiLFxuICAgICAgICBcImNsYXNzX25hbWVcIixcbiAgICAgICAgXCJmb3JlaWduX2tleVwiLFxuICAgICAgICBcImtsYXNzXCIsXG4gICAgICAgIFwib3B0aW9uc1wiLFxuICAgICAgICBcInJlc291cmNlX25hbWVcIixcbiAgICAgICAgXCJ0eXBlXCJcbiAgICAgIClcbiAgICAgIGNvbnN0IGVuc3VyZU1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGBlbnN1cmVfJHtyZWxhdGlvbnNoaXBOYW1lfV9sb2FkZWRgLCB0cnVlKVxuICAgICAgY29uc3QgbG9hZE1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGBsb2FkXyR7cmVsYXRpb25zaGlwTmFtZX1gLCB0cnVlKVxuICAgICAgY29uc3QgbW9kZWxNZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShyZWxhdGlvbnNoaXBOYW1lLCB0cnVlKVxuXG4gICAgICBpZiAodHlwZSA9PSBcImJlbG9uZ3NfdG9cIikge1xuICAgICAgICB0aGlzLmRlZmluZUJlbG9uZ3NUb0dldE1ldGhvZCh7TW9kZWxDbGFzcywgbW9kZWxNZXRob2ROYW1lLCByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICAgICAgdGhpcy5kZWZpbmVCZWxvbmdzVG9Mb2FkTWV0aG9kKHtcbiAgICAgICAgICBmb3JlaWduS2V5LFxuICAgICAgICAgIGtsYXNzUHJpbWFyeUtleSxcbiAgICAgICAgICBsb2FkTWV0aG9kTmFtZSxcbiAgICAgICAgICBNb2RlbENsYXNzLFxuICAgICAgICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICAgICAgICBvcHRpb25zUHJpbWFyeUtleSxcbiAgICAgICAgICByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgIHJlc291cmNlTmFtZVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRlZmluZUVuc3VyZUFzc29jaWF0aW9uTG9hZGVkTWV0aG9kKHtlbnN1cmVNZXRob2ROYW1lLCBNb2RlbENsYXNzLCByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImhhc19tYW55XCIpIHtcbiAgICAgICAgdGhpcy5kZWZpbmVIYXNNYW55R2V0TWV0aG9kKHtcbiAgICAgICAgICBhY3RpdmVSZWNvcmROYW1lLFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBmb3JlaWduS2V5LFxuICAgICAgICAgIE1vZGVsQ2xhc3MsXG4gICAgICAgICAgbW9kZWxNZXRob2ROYW1lLFxuICAgICAgICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICAgICAgICBvcHRpb25zQXMsXG4gICAgICAgICAgb3B0aW9uc1ByaW1hcnlLZXksXG4gICAgICAgICAgb3B0aW9uc1Rocm91Z2gsXG4gICAgICAgICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICByZXNvdXJjZU5hbWVcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kZWZpbmVIYXNNYW55TG9hZE1ldGhvZCh7XG4gICAgICAgICAgZm9yZWlnbktleSxcbiAgICAgICAgICBsb2FkTWV0aG9kTmFtZSxcbiAgICAgICAgICBNb2RlbENsYXNzLFxuICAgICAgICAgIG1vZGVsQ2xhc3NEYXRhLFxuICAgICAgICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICAgICAgICBvcHRpb25zVGhyb3VnaCxcbiAgICAgICAgICByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgIHJlc291cmNlTmFtZVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRlZmluZUVuc3VyZUFzc29jaWF0aW9uTG9hZGVkTWV0aG9kKHtlbnN1cmVNZXRob2ROYW1lLCBNb2RlbENsYXNzLCByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImhhc19vbmVcIikge1xuICAgICAgICB0aGlzLmRlZmluZUhhc09uZUdldE1ldGhkKHtNb2RlbENsYXNzLCBtb2RlbE1ldGhvZE5hbWUsIHJlbGF0aW9uc2hpcE5hbWV9KVxuICAgICAgICB0aGlzLmRlZmluZUhhc09uZUxvYWRNZXRob2Qoe1xuICAgICAgICAgIGFjdGl2ZVJlY29yZFByaW1hcnlLZXksXG4gICAgICAgICAgZm9yZWlnbktleSxcbiAgICAgICAgICBsb2FkTWV0aG9kTmFtZSxcbiAgICAgICAgICBNb2RlbENsYXNzLFxuICAgICAgICAgIG1vZGVsQ2xhc3NEYXRhLFxuICAgICAgICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICAgICAgICBvcHRpb25zVGhyb3VnaCxcbiAgICAgICAgICByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgIHJlc291cmNlTmFtZVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRlZmluZUVuc3VyZUFzc29jaWF0aW9uTG9hZGVkTWV0aG9kKHtlbnN1cmVNZXRob2ROYW1lLCBNb2RlbENsYXNzLCByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZWxhdGlvbnNoaXAgdHlwZTogJHt0eXBlfWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGRlZmluZUVuc3VyZUFzc29jaWF0aW9uTG9hZGVkTWV0aG9kLiAqL1xuICBkZWZpbmVFbnN1cmVBc3NvY2lhdGlvbkxvYWRlZE1ldGhvZCAoe2Vuc3VyZU1ldGhvZE5hbWUsIE1vZGVsQ2xhc3MsIHJlbGF0aW9uc2hpcE5hbWV9KSB7XG4gICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbZW5zdXJlTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnN1cmVBc3NvY2lhdGlvbkxvYWRlZChyZWxhdGlvbnNoaXBOYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBkZWZpbmVCZWxvbmdzVG9HZXRNZXRob2QuICovXG4gIGRlZmluZUJlbG9uZ3NUb0dldE1ldGhvZCAoe01vZGVsQ2xhc3MsIG1vZGVsTWV0aG9kTmFtZSwgcmVsYXRpb25zaGlwTmFtZX0pIHtcbiAgICBNb2RlbENsYXNzLnByb3RvdHlwZVttb2RlbE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRCZWxvbmdzVG9SZWZsZWN0aW9uKHtyZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgfVxuICB9XG5cbiAgLyoqIGRlZmluZUJlbG9uZ3NUb0xvYWRNZXRob2QuICovXG4gIGRlZmluZUJlbG9uZ3NUb0xvYWRNZXRob2QgKHtmb3JlaWduS2V5LCBrbGFzc1ByaW1hcnlLZXksIE1vZGVsQ2xhc3MsIG1vZGVsUmVjaXBlc0xvYWRlciwgbG9hZE1ldGhvZE5hbWUsIG9wdGlvbnNQcmltYXJ5S2V5LCByZWxhdGlvbnNoaXBOYW1lLCByZXNvdXJjZU5hbWV9KSB7XG4gICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbG9hZE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZm9yZWlnbktleU1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGZvcmVpZ25LZXksIHRydWUpXG5cbiAgICAgIGlmICghKGZvcmVpZ25LZXlNZXRob2ROYW1lIGluIHRoaXMpKSB0aHJvdyBuZXcgRXJyb3IoYEZvcmVpZ24ga2V5IG1ldGhvZCB3YXNuJ3QgZGVmaW5lZDogJHtmb3JlaWduS2V5TWV0aG9kTmFtZX1gKVxuXG4gICAgICBjb25zdCBpZCA9IHRoaXNbZm9yZWlnbktleU1ldGhvZE5hbWVdKClcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbFJlY2lwZXNMb2FkZXIuZ2V0TW9kZWxDbGFzcyhyZXNvdXJjZU5hbWUpXG4gICAgICBjb25zdCByYW5zYWNrID0ge31cbiAgICAgIGNvbnN0IHJhbnNhY2tJZFNlYXJjaEtleSA9IGAke29wdGlvbnNQcmltYXJ5S2V5IHx8IGtsYXNzUHJpbWFyeUtleX1fZXFgXG5cbiAgICAgIHJhbnNhY2tbcmFuc2Fja0lkU2VhcmNoS2V5XSA9IGlkXG5cbiAgICAgIHJldHVybiB0aGlzLl9sb2FkQmVsb25nc1RvUmVmbGVjdGlvbihcbiAgICAgICAge3JlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lLCBtb2RlbDogdGhpcywgbW9kZWxDbGFzc30sXG4gICAgICAgIHtyYW5zYWNrfVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGRlZmluZUhhc01hbnlHZXRNZXRob2QgKHtcbiAgICBhY3RpdmVSZWNvcmROYW1lLFxuICAgIGNsYXNzTmFtZSxcbiAgICBmb3JlaWduS2V5LFxuICAgIE1vZGVsQ2xhc3MsXG4gICAgbW9kZWxNZXRob2ROYW1lLFxuICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICBvcHRpb25zQXMsXG4gICAgb3B0aW9uc1ByaW1hcnlLZXksXG4gICAgb3B0aW9uc1Rocm91Z2gsXG4gICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICByZXNvdXJjZU5hbWVcbiAgfSkge1xuICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW21vZGVsTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMucHJpbWFyeUtleSgpXG4gICAgICBjb25zdCBtb2RlbENsYXNzID0gbW9kZWxSZWNpcGVzTG9hZGVyLmdldE1vZGVsQ2xhc3MocmVzb3VyY2VOYW1lKVxuICAgICAgY29uc3QgcmFuc2FjayA9IHt9XG5cbiAgICAgIHJhbnNhY2tbYCR7Zm9yZWlnbktleX1fZXFgXSA9IGlkXG5cbiAgICAgIGNvbnN0IGhhc01hbnlQYXJhbWV0ZXJzID0ge1xuICAgICAgICByZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgIG1vZGVsTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBtb2RlbENsYXNzXG4gICAgICB9XG5cbiAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnNcblxuICAgICAgaWYgKG9wdGlvbnNUaHJvdWdoKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHRocm91Z2g6IHtcbiAgICAgICAgICAgICAgbW9kZWw6IGFjdGl2ZVJlY29yZE5hbWUsXG4gICAgICAgICAgICAgIGlkOiB0aGlzLnByaW1hcnlLZXkoKSxcbiAgICAgICAgICAgICAgcmVmbGVjdGlvbjogcmVsYXRpb25zaGlwTmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmFuc2FjayA9IHt9XG4gICAgICAgIGNvbnN0IHByaW1hcnlLZXlDb2x1bW5OYW1lID0gb3B0aW9uc1ByaW1hcnlLZXkgfHwgZGlnZyhNb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwicHJpbWFyeUtleVwiKVxuICAgICAgICBjb25zdCBwcmltYXJ5S2V5TWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUocHJpbWFyeUtleUNvbHVtbk5hbWUsIHRydWUpXG5cbiAgICAgICAgaWYgKCEocHJpbWFyeUtleU1ldGhvZE5hbWUgaW4gdGhpcykpIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBwcmltYXJ5IGtleSBtZXRob2Q6ICR7cHJpbWFyeUtleU1ldGhvZE5hbWV9YClcblxuICAgICAgICByYW5zYWNrW2Ake2ZvcmVpZ25LZXl9X2VxYF0gPSB0aGlzW3ByaW1hcnlLZXlNZXRob2ROYW1lXSgpXG5cbiAgICAgICAgaWYgKG9wdGlvbnNBcykge1xuICAgICAgICAgIHJhbnNhY2tbYCR7b3B0aW9uc0FzfV90eXBlX2VxYF0gPSBhY3RpdmVSZWNvcmROYW1lXG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSB7cmFuc2Fja31cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKGhhc01hbnlQYXJhbWV0ZXJzLCBxdWVyeVBhcmFtZXRlcnMpXG4gICAgfVxuICB9XG5cbiAgLyoqIGRlZmluZUhhc01hbnlMb2FkTWV0aG9kLiAqL1xuICBkZWZpbmVIYXNNYW55TG9hZE1ldGhvZCAoe2ZvcmVpZ25LZXksIGxvYWRNZXRob2ROYW1lLCBNb2RlbENsYXNzLCBtb2RlbENsYXNzRGF0YSwgbW9kZWxSZWNpcGVzTG9hZGVyLCBvcHRpb25zVGhyb3VnaCwgcmVsYXRpb25zaGlwTmFtZSwgcmVzb3VyY2VOYW1lfSkge1xuICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW2xvYWRNZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5wcmltYXJ5S2V5KClcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbFJlY2lwZXNMb2FkZXIuZ2V0TW9kZWxDbGFzcyhyZXNvdXJjZU5hbWUpXG5cbiAgICAgIGlmIChvcHRpb25zVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IGRpZ2cobW9kZWxDbGFzc0RhdGEsIFwiY2xhc3NOYW1lXCIpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRIYXNNYW55UmVmbGVjdGlvbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICAgICAgbW9kZWxDbGFzc1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHRocm91Z2g6IHtcbiAgICAgICAgICAgICAgICBtb2RlbDogbW9kZWxDbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcmVmbGVjdGlvbjogcmVsYXRpb25zaGlwTmFtZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByYW5zYWNrID0ge31cblxuICAgICAgICByYW5zYWNrW2Ake2ZvcmVpZ25LZXl9X2VxYF0gPSBpZFxuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkSGFzTWFueVJlZmxlY3Rpb24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVmbGVjdGlvbk5hbWU6IHJlbGF0aW9uc2hpcE5hbWUsXG4gICAgICAgICAgICBtb2RlbDogdGhpcyxcbiAgICAgICAgICAgIG1vZGVsQ2xhc3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtyYW5zYWNrfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIGRlZmluZUhhc09uZUdldE1ldGhkLiAqL1xuICBkZWZpbmVIYXNPbmVHZXRNZXRoZCAoe01vZGVsQ2xhc3MsIG1vZGVsTWV0aG9kTmFtZSwgcmVsYXRpb25zaGlwTmFtZX0pIHtcbiAgICBNb2RlbENsYXNzLnByb3RvdHlwZVttb2RlbE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRIYXNPbmVSZWZsZWN0aW9uKHtyZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgfVxuICB9XG5cbiAgZGVmaW5lSGFzT25lTG9hZE1ldGhvZCAoe1xuICAgIGFjdGl2ZVJlY29yZFByaW1hcnlLZXksXG4gICAgZm9yZWlnbktleSxcbiAgICBsb2FkTWV0aG9kTmFtZSxcbiAgICBNb2RlbENsYXNzLFxuICAgIG1vZGVsQ2xhc3NEYXRhLFxuICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICBvcHRpb25zVGhyb3VnaCxcbiAgICByZWxhdGlvbnNoaXBOYW1lLFxuICAgIHJlc291cmNlTmFtZVxuICB9KSB7XG4gICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbG9hZE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHJpbWFyeUtleU1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFjdGl2ZVJlY29yZFByaW1hcnlLZXksIHRydWUpXG5cbiAgICAgIGlmICghKHByaW1hcnlLZXlNZXRob2ROYW1lIGluIHRoaXMpKSB0aHJvdyBuZXcgRXJyb3IoYFByaW1hcnkga2V5IG1ldGhvZCB3YXNuJ3QgZGVmaW5lZDogJHtwcmltYXJ5S2V5TWV0aG9kTmFtZX1gKVxuXG4gICAgICBjb25zdCBpZCA9IHRoaXNbcHJpbWFyeUtleU1ldGhvZE5hbWVdKClcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbFJlY2lwZXNMb2FkZXIuZ2V0TW9kZWxDbGFzcyhyZXNvdXJjZU5hbWUpXG5cbiAgICAgIGlmIChvcHRpb25zVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IGRpZ2cobW9kZWxDbGFzc0RhdGEsIFwiY2xhc3NOYW1lXCIpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRIYXNPbmVSZWZsZWN0aW9uKFxuICAgICAgICAgIHtyZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSwgbW9kZWw6IHRoaXMsIG1vZGVsQ2xhc3N9LFxuICAgICAgICAgIHtwYXJhbXM6IHt0aHJvdWdoOiB7bW9kZWw6IG1vZGVsQ2xhc3NOYW1lLCBpZCwgcmVmbGVjdGlvbjogcmVsYXRpb25zaGlwTmFtZX19fVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByYW5zYWNrID0ge31cblxuICAgICAgICByYW5zYWNrW2Ake2ZvcmVpZ25LZXl9X2VxYF0gPSBpZFxuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkSGFzT25lUmVmbGVjdGlvbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICAgICAgbW9kZWxDbGFzc1xuICAgICAgICAgIH0sXG4gICAgICAgICAge3JhbnNhY2t9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
374
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtcmVjaXBlcy1tb2RlbC1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbIm1vZGVsLXJlY2lwZXMtbW9kZWwtbG9hZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFDWixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUNwQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQTtBQUV4QyxvRkFBb0Y7QUFDcEYseUVBQXlFO0FBQ3pFLGtHQUFrRztBQUNsRyxzRUFBc0U7QUFDdEUsb0lBQW9JO0FBQ3BJOzs7Ozs7R0FNRztBQUNIOzs7OztHQUtHO0FBQ0g7Ozs7Ozs7OztHQVNHO0FBQ0g7Ozs7Ozs7R0FPRztBQUVILDREQUE0RDtBQUM1RCxNQUFNLENBQUMsT0FBTyxPQUFPLCtCQUErQjtJQUNsRDs7Ozs7T0FLRztJQUNILFlBQWEsRUFBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7UUFFL0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1QsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDL0MsTUFBTSxFQUNKLFVBQVUsRUFDVixtQkFBbUIsRUFBRSxrQkFBa0IsRUFDdkMsZUFBZSxFQUFFLGNBQWMsRUFDL0IsZ0JBQWdCLEVBQUUsY0FBYyxFQUNoQyxhQUFhLEVBQ2QsR0FBRyxJQUFJLENBQ04sV0FBVyxFQUNYLFlBQVks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Iiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7ZGlnZywgZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL2Jhc2UtbW9kZWwuanNcIlxuaW1wb3J0IENvbGxlY3Rpb24gZnJvbSBcIi4vY29sbGVjdGlvbi5qc1wiXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9tb2RlbC1yZWNpcGVzLWxvYWRlci5qc1wiKS5kZWZhdWx0fSBNb2RlbFJlY2lwZXNMb2FkZXJMaWtlICovXG4vKiogQHR5cGVkZWYge3R5cGVvZiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH0gTW9kZWxDbGFzc0xpa2UgKi9cbi8qKiBAdHlwZWRlZiB7TW9kZWxDbGFzc0xpa2UgJiB7bW9kZWxDbGFzc0RhdGE6ICgpID0+IE1vZGVsUmVjaXBlQ2xhc3NEYXRhfX0gTW9kZWxDbGFzc1dpdGhEYXRhICovXG4vKiogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHtuYW1lOiBzdHJpbmd9Pn0gTW9kZWxSZWNpcGVBdHRyaWJ1dGVzICovXG4vKiogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHthcmdzPzogUmVjb3JkPHN0cmluZywgb2JqZWN0IHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ+fT59IE1vZGVsUmVjaXBlQ29tbWFuZHMgKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTW9kZWxSZWNpcGVDbGFzc0RhdGFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc05hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb2xsZWN0aW9uTmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcmltYXJ5S2V5XG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVsYXRpb25zaGlwT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFthc11cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHJpbWFyeV9rZXldXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rocm91Z2hdXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVsYXRpb25zaGlwRGVmaW5pdGlvblxuICogQHByb3BlcnR5IHt7bmFtZTogc3RyaW5nLCBwcmltYXJ5X2tleTogc3RyaW5nfX0gYWN0aXZlX3JlY29yZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzX25hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmb3JlaWduX2tleVxuICogQHByb3BlcnR5IHt7cHJpbWFyeV9rZXk6IHN0cmluZ319IGtsYXNzXG4gKiBAcHJvcGVydHkge1JlbGF0aW9uc2hpcE9wdGlvbnN9IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZXNvdXJjZV9uYW1lXG4gKiBAcHJvcGVydHkge1wiYmVsb25nc190b1wiIHwgXCJoYXNfbWFueVwiIHwgXCJoYXNfb25lXCJ9IHR5cGVcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBNb2RlbFJlY2lwZVxuICogQHByb3BlcnR5IHtNb2RlbFJlY2lwZUF0dHJpYnV0ZXN9IGF0dHJpYnV0ZXNcbiAqIEBwcm9wZXJ0eSB7TW9kZWxSZWNpcGVDb21tYW5kc30gY29sbGVjdGlvbl9jb21tYW5kc1xuICogQHByb3BlcnR5IHtNb2RlbFJlY2lwZUNvbW1hbmRzfSBtZW1iZXJfY29tbWFuZHNcbiAqIEBwcm9wZXJ0eSB7TW9kZWxSZWNpcGVDbGFzc0RhdGF9IG1vZGVsX2NsYXNzX2RhdGFcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmVsYXRpb25zaGlwRGVmaW5pdGlvbj59IHJlbGF0aW9uc2hpcHNcbiAqL1xuXG4vKiogQnVpbGRzIHJ1bnRpbWUgbW9kZWwgY2xhc3NlcyBmcm9tIHJlY2lwZSBkZWZpbml0aW9ucy4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyTW9kZWxSZWNpcGVzTW9kZWxMb2FkZXIge1xuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByb290MFxuICAgKiBAcGFyYW0ge01vZGVsUmVjaXBlfSByb290MC5tb2RlbFJlY2lwZVxuICAgKiBAcGFyYW0ge01vZGVsUmVjaXBlc0xvYWRlckxpa2V9IHJvb3QwLm1vZGVsUmVjaXBlc0xvYWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IgKHttb2RlbFJlY2lwZSwgbW9kZWxSZWNpcGVzTG9hZGVyfSkge1xuICAgIGlmICghbW9kZWxSZWNpcGUpIHRocm93IG5ldyBFcnJvcihcIk5vICdtb2RlbFJlY2lwZScgd2FzIGdpdmVuXCIpXG5cbiAgICB0aGlzLm1vZGVsUmVjaXBlc0xvYWRlciA9IG1vZGVsUmVjaXBlc0xvYWRlclxuICAgIHRoaXMubW9kZWxSZWNpcGUgPSBtb2RlbFJlY2lwZVxuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZUNsYXNzLlxuICAgKiBAcmV0dXJucyB7TW9kZWxDbGFzc0xpa2V9XG4gICAqL1xuICBjcmVhdGVDbGFzcyAoKSB7XG4gICAgY29uc3Qge21vZGVsUmVjaXBlfSA9IGRpZ3ModGhpcywgXCJtb2RlbFJlY2lwZVwiKVxuICAgIGNvbnN0IHtcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBjb2xsZWN0aW9uX2NvbW1hbmRzOiBjb2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgICBtZW1iZXJfY29tbWFuZHM6IG1lbWJlckNvbW1hbmRzLFxuICAgICAgbW9kZWxfY2xhc3NfZGF0YTogbW9kZWxDbGFzc0RhdGEsXG4gICAgICByZWxhdGlvbnNoaXBzXG4gICAgfSA9IGRpZ3MoXG4gICAgICBtb2RlbFJlY2lwZSxcbiAgICAgIFwiYXR0cmlidXRlc1wiLFxuICAgICAgXCJjb2xsZWN0aW9uX2NvbW1hbmRzXCIsXG4gICAgICBcIm1lbWJlcl9jb21tYW5kc1wiLFxuICAgICAgXCJtb2RlbF9jbGFzc19kYXRhXCIsXG4gICAgICBcInJlbGF0aW9uc2hpcHNcIlxuICAgIClcbiAgICBjb25zdCB7bmFtZTogbW9kZWxDbGFzc05hbWV9ID0gZGlncyhtb2RlbENsYXNzRGF0YSwgXCJuYW1lXCIpXG4gICAgY29uc3QgTW9kZWxDbGFzcyA9IGNsYXNzIEFwaU1ha2VyTW9kZWwgZXh0ZW5kcyBCYXNlTW9kZWwgeyB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICBNb2RlbENsYXNzLFxuICAgICAgXCJuYW1lXCIsXG4gICAgICB7d3JpdGFibGU6IGZhbHNlLCB2YWx1ZTogbW9kZWxDbGFzc05hbWV9XG4gICAgKVxuXG4gICAgY29uc3QgbW9kZWxDbGFzc0NvbnN0cnVjdG9yID0gLyoqIEB0eXBlIHtNb2RlbENsYXNzV2l0aERhdGF9ICovIChNb2RlbENsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvcilcbiAgICBtb2RlbENsYXNzQ29uc3RydWN0b3IubW9kZWxDbGFzc0RhdGEgPSAoKSA9PiBtb2RlbENsYXNzRGF0YVxuXG4gICAgdGhpcy5hZGRBdHRyaWJ1dGVNZXRob2RzVG9Nb2RlbENsYXNzKE1vZGVsQ2xhc3MsIGF0dHJpYnV0ZXMpXG4gICAgdGhpcy5hZGRSZWxhdGlvbnNoaXBzVG9Nb2RlbENsYXNzKE1vZGVsQ2xhc3MsIG1vZGVsQ2xhc3NEYXRhLCByZWxhdGlvbnNoaXBzKVxuICAgIHRoaXMuYWRkUXVlcnlDb21tYW5kc1RvTW9kZWxDbGFzcyhNb2RlbENsYXNzLCBjb2xsZWN0aW9uQ29tbWFuZHMpXG4gICAgdGhpcy5hZGRNZW1iZXJDb21tYW5kc1RvTW9kZWxDbGFzcyhNb2RlbENsYXNzLCBtZW1iZXJDb21tYW5kcylcblxuICAgIHJldHVybiBNb2RlbENsYXNzXG4gIH1cblxuICAvKipcbiAgICogYWRkQXR0cmlidXRlTWV0aG9kc1RvTW9kZWxDbGFzcy5cbiAgICogQHBhcmFtIHtNb2RlbENsYXNzTGlrZX0gTW9kZWxDbGFzc1xuICAgKiBAcGFyYW0ge01vZGVsUmVjaXBlQXR0cmlidXRlc30gYXR0cmlidXRlc1xuICAgKi9cbiAgYWRkQXR0cmlidXRlTWV0aG9kc1RvTW9kZWxDbGFzcyAoTW9kZWxDbGFzcywgYXR0cmlidXRlcykge1xuICAgIGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdXG4gICAgICBjb25zdCB7bmFtZX0gPSBkaWdzKGF0dHJpYnV0ZSwgXCJuYW1lXCIpXG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShuYW1lLCB0cnVlKVxuICAgICAgY29uc3QgaGFzTWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYGhhc18ke25hbWV9YCwgdHJ1ZSlcblxuICAgICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRBdHRyaWJ1dGVVbmRlcnNjb3JlKGF0dHJpYnV0ZU5hbWUpXG4gICAgICB9XG5cbiAgICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW2hhc01ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbbWV0aG9kTmFtZV0oKVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ByZXNlbnQodmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGFkZFF1ZXJ5Q29tbWFuZHNUb01vZGVsQ2xhc3MuXG4gICAqIEBwYXJhbSB7TW9kZWxDbGFzc0xpa2V9IE1vZGVsQ2xhc3NcbiAgICogQHBhcmFtIHtNb2RlbFJlY2lwZUNvbW1hbmRzfSBjb2xsZWN0aW9uQ29tbWFuZHNcbiAgICovXG4gIGFkZFF1ZXJ5Q29tbWFuZHNUb01vZGVsQ2xhc3MgKE1vZGVsQ2xhc3MsIGNvbGxlY3Rpb25Db21tYW5kcykge1xuICAgIGZvciAoY29uc3QgY29sbGVjdGlvbkNvbW1hbmROYW1lIGluIGNvbGxlY3Rpb25Db21tYW5kcykge1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoY29sbGVjdGlvbkNvbW1hbmROYW1lLCB0cnVlKVxuICAgICAgY29uc3QgY29sbGVjdGlvbkNvbW1hbmQgPSBjb2xsZWN0aW9uQ29tbWFuZHNbY29sbGVjdGlvbkNvbW1hbmROYW1lXVxuXG4gICAgICBNb2RlbENsYXNzW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKGFyZ3MsIGNvbW1hbmRBcmdzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxDb2xsZWN0aW9uQ29tbWFuZChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgY29tbWFuZDogY29sbGVjdGlvbkNvbW1hbmROYW1lLFxuICAgICAgICAgICAgY29sbGVjdGlvbk5hbWU6IGRpZ2codGhpcy5tb2RlbENsYXNzRGF0YSgpLCBcImNvbGxlY3Rpb25OYW1lXCIpLFxuICAgICAgICAgICAgdHlwZTogXCJjb2xsZWN0aW9uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsuLi5kaWdnKGNvbGxlY3Rpb25Db21tYW5kLCBcImFyZ3NcIiksIC4uLmNvbW1hbmRBcmdzfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGFkZE1lbWJlckNvbW1hbmRzVG9Nb2RlbENsYXNzLlxuICAgKiBAcGFyYW0ge01vZGVsQ2xhc3NMaWtlfSBNb2RlbENsYXNzXG4gICAqIEBwYXJhbSB7TW9kZWxSZWNpcGVDb21tYW5kc30gbWVtYmVyQ29tbWFuZHNcbiAgICovXG4gIGFkZE1lbWJlckNvbW1hbmRzVG9Nb2RlbENsYXNzIChNb2RlbENsYXNzLCBtZW1iZXJDb21tYW5kcykge1xuICAgIGZvciAoY29uc3QgbWVtYmVyQ29tbWFuZE5hbWUgaW4gbWVtYmVyQ29tbWFuZHMpIHtcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKG1lbWJlckNvbW1hbmROYW1lLCB0cnVlKVxuICAgICAgY29uc3QgbWVtYmVyQ29tbWFuZCA9IG1lbWJlckNvbW1hbmRzW21lbWJlckNvbW1hbmROYW1lXVxuXG4gICAgICBNb2RlbENsYXNzLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uIChhcmdzLCBjb21tYW5kQXJncyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxsTWVtYmVyQ29tbWFuZChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgY29tbWFuZDogbWVtYmVyQ29tbWFuZE5hbWUsXG4gICAgICAgICAgICBwcmltYXJ5S2V5OiB0aGlzLnByaW1hcnlLZXkoKSxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25OYW1lOiB0aGlzLm1vZGVsQ2xhc3NEYXRhKCkuY29sbGVjdGlvbk5hbWUsXG4gICAgICAgICAgICB0eXBlOiBcIm1lbWJlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7Li4uZGlnZyhtZW1iZXJDb21tYW5kLCBcImFyZ3NcIiksIC4uLmNvbW1hbmRBcmdzfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGFkZFJlbGF0aW9uc2hpcHNUb01vZGVsQ2xhc3MuXG4gICAqIEBwYXJhbSB7TW9kZWxDbGFzc0xpa2V9IE1vZGVsQ2xhc3NcbiAgICogQHBhcmFtIHtNb2RlbFJlY2lwZUNsYXNzRGF0YX0gbW9kZWxDbGFzc0RhdGFcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbnNoaXBEZWZpbml0aW9uPn0gcmVsYXRpb25zaGlwc1xuICAgKi9cbiAgYWRkUmVsYXRpb25zaGlwc1RvTW9kZWxDbGFzcyAoTW9kZWxDbGFzcywgbW9kZWxDbGFzc0RhdGEsIHJlbGF0aW9uc2hpcHMpIHtcbiAgICBjb25zdCB7bW9kZWxSZWNpcGVzTG9hZGVyfSA9IGRpZ3ModGhpcywgXCJtb2RlbFJlY2lwZXNMb2FkZXJcIilcblxuICAgIGZvciAoY29uc3QgcmVsYXRpb25zaGlwTmFtZSBpbiByZWxhdGlvbnNoaXBzKSB7XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBzW3JlbGF0aW9uc2hpcE5hbWVdXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFjdGl2ZV9yZWNvcmQ6IHtcbiAgICAgICAgICBuYW1lOiBhY3RpdmVSZWNvcmROYW1lLFxuICAgICAgICAgIHByaW1hcnlfa2V5OiBhY3RpdmVSZWNvcmRQcmltYXJ5S2V5XG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzX25hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgZm9yZWlnbl9rZXk6IGZvcmVpZ25LZXksXG4gICAgICAgIGtsYXNzOiB7cHJpbWFyeV9rZXk6IGtsYXNzUHJpbWFyeUtleX0sXG4gICAgICAgIG9wdGlvbnM6IHthczogb3B0aW9uc0FzLCBwcmltYXJ5X2tleTogb3B0aW9uc1ByaW1hcnlLZXksIHRocm91Z2g6IG9wdGlvbnNUaHJvdWdofSxcbiAgICAgICAgcmVzb3VyY2VfbmFtZTogcmVzb3VyY2VOYW1lLFxuICAgICAgICB0eXBlXG4gICAgICB9ID0gZGlncyhcbiAgICAgICAgcmVsYXRpb25zaGlwLFxuICAgICAgICBcImFjdGl2ZV9yZWNvcmRcIixcbiAgICAgICAgXCJjbGFzc19uYW1lXCIsXG4gICAgICAgIFwiZm9yZWlnbl9rZXlcIixcbiAgICAgICAgXCJrbGFzc1wiLFxuICAgICAgICBcIm9wdGlvbnNcIixcbiAgICAgICAgXCJyZXNvdXJjZV9uYW1lXCIsXG4gICAgICAgIFwidHlwZVwiXG4gICAgICApXG4gICAgICBjb25zdCBlbnN1cmVNZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShgZW5zdXJlXyR7cmVsYXRpb25zaGlwTmFtZX1fbG9hZGVkYCwgdHJ1ZSlcbiAgICAgIGNvbnN0IGxvYWRNZXRob2ROYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShgbG9hZF8ke3JlbGF0aW9uc2hpcE5hbWV9YCwgdHJ1ZSlcbiAgICAgIGNvbnN0IG1vZGVsTWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUocmVsYXRpb25zaGlwTmFtZSwgdHJ1ZSlcblxuICAgICAgaWYgKHR5cGUgPT0gXCJiZWxvbmdzX3RvXCIpIHtcbiAgICAgICAgdGhpcy5kZWZpbmVCZWxvbmdzVG9HZXRNZXRob2Qoe01vZGVsQ2xhc3MsIG1vZGVsTWV0aG9kTmFtZSwgcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgICAgIHRoaXMuZGVmaW5lQmVsb25nc1RvTG9hZE1ldGhvZCh7XG4gICAgICAgICAgZm9yZWlnbktleSxcbiAgICAgICAgICBrbGFzc1ByaW1hcnlLZXksXG4gICAgICAgICAgbG9hZE1ldGhvZE5hbWUsXG4gICAgICAgICAgTW9kZWxDbGFzcyxcbiAgICAgICAgICBtb2RlbFJlY2lwZXNMb2FkZXIsXG4gICAgICAgICAgb3B0aW9uc1ByaW1hcnlLZXksXG4gICAgICAgICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICByZXNvdXJjZU5hbWVcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kZWZpbmVFbnN1cmVBc3NvY2lhdGlvbkxvYWRlZE1ldGhvZCh7ZW5zdXJlTWV0aG9kTmFtZSwgTW9kZWxDbGFzcywgcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJoYXNfbWFueVwiKSB7XG4gICAgICAgIHRoaXMuZGVmaW5lSGFzTWFueUdldE1ldGhvZCh7XG4gICAgICAgICAgYWN0aXZlUmVjb3JkTmFtZSxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgZm9yZWlnbktleSxcbiAgICAgICAgICBNb2RlbENsYXNzLFxuICAgICAgICAgIG1vZGVsTWV0aG9kTmFtZSxcbiAgICAgICAgICBtb2RlbFJlY2lwZXNMb2FkZXIsXG4gICAgICAgICAgb3B0aW9uc0FzLFxuICAgICAgICAgIG9wdGlvbnNQcmltYXJ5S2V5LFxuICAgICAgICAgIG9wdGlvbnNUaHJvdWdoLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcE5hbWUsXG4gICAgICAgICAgcmVzb3VyY2VOYW1lXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuZGVmaW5lSGFzTWFueUxvYWRNZXRob2Qoe1xuICAgICAgICAgIGZvcmVpZ25LZXksXG4gICAgICAgICAgbG9hZE1ldGhvZE5hbWUsXG4gICAgICAgICAgTW9kZWxDbGFzcyxcbiAgICAgICAgICBtb2RlbENsYXNzRGF0YSxcbiAgICAgICAgICBtb2RlbFJlY2lwZXNMb2FkZXIsXG4gICAgICAgICAgb3B0aW9uc1Rocm91Z2gsXG4gICAgICAgICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICByZXNvdXJjZU5hbWVcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kZWZpbmVFbnN1cmVBc3NvY2lhdGlvbkxvYWRlZE1ldGhvZCh7ZW5zdXJlTWV0aG9kTmFtZSwgTW9kZWxDbGFzcywgcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJoYXNfb25lXCIpIHtcbiAgICAgICAgdGhpcy5kZWZpbmVIYXNPbmVHZXRNZXRoZCh7TW9kZWxDbGFzcywgbW9kZWxNZXRob2ROYW1lLCByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICAgICAgdGhpcy5kZWZpbmVIYXNPbmVMb2FkTWV0aG9kKHtcbiAgICAgICAgICBhY3RpdmVSZWNvcmRQcmltYXJ5S2V5LFxuICAgICAgICAgIGZvcmVpZ25LZXksXG4gICAgICAgICAgbG9hZE1ldGhvZE5hbWUsXG4gICAgICAgICAgTW9kZWxDbGFzcyxcbiAgICAgICAgICBtb2RlbENsYXNzRGF0YSxcbiAgICAgICAgICBtb2RlbFJlY2lwZXNMb2FkZXIsXG4gICAgICAgICAgb3B0aW9uc1Rocm91Z2gsXG4gICAgICAgICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICByZXNvdXJjZU5hbWVcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kZWZpbmVFbnN1cmVBc3NvY2lhdGlvbkxvYWRlZE1ldGhvZCh7ZW5zdXJlTWV0aG9kTmFtZSwgTW9kZWxDbGFzcywgcmVsYXRpb25zaGlwTmFtZX0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVsYXRpb25zaGlwIHR5cGU6ICR7dHlwZX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBkZWZpbmVFbnN1cmVBc3NvY2lhdGlvbkxvYWRlZE1ldGhvZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHJvb3QwXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5lbnN1cmVNZXRob2ROYW1lXG4gICAqIEBwYXJhbSB7TW9kZWxDbGFzc0xpa2V9IHJvb3QwLk1vZGVsQ2xhc3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3QwLnJlbGF0aW9uc2hpcE5hbWVcbiAgICovXG4gIGRlZmluZUVuc3VyZUFzc29jaWF0aW9uTG9hZGVkTWV0aG9kICh7ZW5zdXJlTWV0aG9kTmFtZSwgTW9kZWxDbGFzcywgcmVsYXRpb25zaGlwTmFtZX0pIHtcbiAgICBNb2RlbENsYXNzLnByb3RvdHlwZVtlbnN1cmVNZXRob2ROYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuc3VyZUFzc29jaWF0aW9uTG9hZGVkKHJlbGF0aW9uc2hpcE5hbWUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGRlZmluZUJlbG9uZ3NUb0dldE1ldGhvZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHJvb3QwXG4gICAqIEBwYXJhbSB7TW9kZWxDbGFzc0xpa2V9IHJvb3QwLk1vZGVsQ2xhc3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3QwLm1vZGVsTWV0aG9kTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdDAucmVsYXRpb25zaGlwTmFtZVxuICAgKi9cbiAgZGVmaW5lQmVsb25nc1RvR2V0TWV0aG9kICh7TW9kZWxDbGFzcywgbW9kZWxNZXRob2ROYW1lLCByZWxhdGlvbnNoaXBOYW1lfSkge1xuICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW21vZGVsTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZEJlbG9uZ3NUb1JlZmxlY3Rpb24oe3JlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZGVmaW5lQmVsb25nc1RvTG9hZE1ldGhvZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHJvb3QwXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5mb3JlaWduS2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5rbGFzc1ByaW1hcnlLZXlcbiAgICogQHBhcmFtIHtNb2RlbENsYXNzTGlrZX0gcm9vdDAuTW9kZWxDbGFzc1xuICAgKiBAcGFyYW0ge01vZGVsUmVjaXBlc0xvYWRlckxpa2V9IHJvb3QwLm1vZGVsUmVjaXBlc0xvYWRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdDAubG9hZE1ldGhvZE5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHJvb3QwLm9wdGlvbnNQcmltYXJ5S2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5yZWxhdGlvbnNoaXBOYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5yZXNvdXJjZU5hbWVcbiAgICovXG4gIGRlZmluZUJlbG9uZ3NUb0xvYWRNZXRob2QgKHtmb3JlaWduS2V5LCBrbGFzc1ByaW1hcnlLZXksIE1vZGVsQ2xhc3MsIG1vZGVsUmVjaXBlc0xvYWRlciwgbG9hZE1ldGhvZE5hbWUsIG9wdGlvbnNQcmltYXJ5S2V5LCByZWxhdGlvbnNoaXBOYW1lLCByZXNvdXJjZU5hbWV9KSB7XG4gICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbG9hZE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZm9yZWlnbktleU1ldGhvZE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGZvcmVpZ25LZXksIHRydWUpXG5cbiAgICAgIGlmICghKGZvcmVpZ25LZXlNZXRob2ROYW1lIGluIHRoaXMpKSB0aHJvdyBuZXcgRXJyb3IoYEZvcmVpZ24ga2V5IG1ldGhvZCB3YXNuJ3QgZGVmaW5lZDogJHtmb3JlaWduS2V5TWV0aG9kTmFtZX1gKVxuXG4gICAgICBjb25zdCBpZCA9IHRoaXNbZm9yZWlnbktleU1ldGhvZE5hbWVdKClcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbFJlY2lwZXNMb2FkZXIuZ2V0TW9kZWxDbGFzcyhyZXNvdXJjZU5hbWUpXG4gICAgICBjb25zdCByYW5zYWNrID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2NvbGxlY3Rpb24uanNcIikuQ29sbGVjdGlvblJhbnNhY2tQYXJhbXN9ICovICh7fSlcbiAgICAgIGNvbnN0IHJhbnNhY2tJZFNlYXJjaEtleSA9IGAke29wdGlvbnNQcmltYXJ5S2V5IHx8IGtsYXNzUHJpbWFyeUtleX1fZXFgXG5cbiAgICAgIHJhbnNhY2tbcmFuc2Fja0lkU2VhcmNoS2V5XSA9IGlkXG5cbiAgICAgIHJldHVybiB0aGlzLl9sb2FkQmVsb25nc1RvUmVmbGVjdGlvbihcbiAgICAgICAge3JlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lLCBtb2RlbDogdGhpcywgbW9kZWxDbGFzc30sXG4gICAgICAgIHtyYW5zYWNrfVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGRlZmluZUhhc01hbnlHZXRNZXRob2QgKHtcbiAgICBhY3RpdmVSZWNvcmROYW1lLFxuICAgIGNsYXNzTmFtZSxcbiAgICBmb3JlaWduS2V5LFxuICAgIE1vZGVsQ2xhc3MsXG4gICAgbW9kZWxNZXRob2ROYW1lLFxuICAgIG1vZGVsUmVjaXBlc0xvYWRlcixcbiAgICBvcHRpb25zQXMsXG4gICAgb3B0aW9uc1ByaW1hcnlLZXksXG4gICAgb3B0aW9uc1Rocm91Z2gsXG4gICAgcmVsYXRpb25zaGlwTmFtZSxcbiAgICByZXNvdXJjZU5hbWVcbiAgfSkge1xuICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW21vZGVsTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMucHJpbWFyeUtleSgpXG4gICAgICBjb25zdCBtb2RlbENsYXNzID0gbW9kZWxSZWNpcGVzTG9hZGVyLmdldE1vZGVsQ2xhc3MocmVzb3VyY2VOYW1lKVxuICAgICAgY29uc3QgcmFuc2FjayA9IHt9XG5cbiAgICAgIHJhbnNhY2tbYCR7Zm9yZWlnbktleX1fZXFgXSA9IGlkXG5cbiAgICAgIGNvbnN0IGhhc01hbnlQYXJhbWV0ZXJzID0ge1xuICAgICAgICByZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgIG1vZGVsTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBtb2RlbENsYXNzXG4gICAgICB9XG5cbiAgICAgIGxldCBxdWVyeVBhcmFtZXRlcnNcblxuICAgICAgaWYgKG9wdGlvbnNUaHJvdWdoKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHRocm91Z2g6IHtcbiAgICAgICAgICAgICAgbW9kZWw6IGFjdGl2ZVJlY29yZE5hbWUsXG4gICAgICAgICAgICAgIGlkOiB0aGlzLnByaW1hcnlLZXkoKSxcbiAgICAgICAgICAgICAgcmVmbGVjdGlvbjogcmVsYXRpb25zaGlwTmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmFuc2FjayA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9jb2xsZWN0aW9uLmpzXCIpLkNvbGxlY3Rpb25SYW5zYWNrUGFyYW1zfSAqLyAoe30pXG4gICAgICAgIGNvbnN0IHByaW1hcnlLZXlDb2x1bW5OYW1lID0gb3B0aW9uc1ByaW1hcnlLZXkgfHwgZGlnZyhNb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwicHJpbWFyeUtleVwiKVxuICAgICAgICBjb25zdCBwcmltYXJ5S2V5TWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUocHJpbWFyeUtleUNvbHVtbk5hbWUsIHRydWUpXG5cbiAgICAgICAgaWYgKCEocHJpbWFyeUtleU1ldGhvZE5hbWUgaW4gdGhpcykpIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBwcmltYXJ5IGtleSBtZXRob2Q6ICR7cHJpbWFyeUtleU1ldGhvZE5hbWV9YClcblxuICAgICAgICByYW5zYWNrW2Ake2ZvcmVpZ25LZXl9X2VxYF0gPSB0aGlzW3ByaW1hcnlLZXlNZXRob2ROYW1lXSgpXG5cbiAgICAgICAgaWYgKG9wdGlvbnNBcykge1xuICAgICAgICAgIHJhbnNhY2tbYCR7b3B0aW9uc0FzfV90eXBlX2VxYF0gPSBhY3RpdmVSZWNvcmROYW1lXG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSB7cmFuc2Fja31cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKGhhc01hbnlQYXJhbWV0ZXJzLCBxdWVyeVBhcmFtZXRlcnMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGRlZmluZUhhc01hbnlMb2FkTWV0aG9kLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcm9vdDBcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3QwLmZvcmVpZ25LZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3QwLmxvYWRNZXRob2ROYW1lXG4gICAqIEBwYXJhbSB7TW9kZWxDbGFzc0xpa2V9IHJvb3QwLk1vZGVsQ2xhc3NcbiAgICogQHBhcmFtIHtNb2RlbFJlY2lwZUNsYXNzRGF0YX0gcm9vdDAubW9kZWxDbGFzc0RhdGFcbiAgICogQHBhcmFtIHtNb2RlbFJlY2lwZXNMb2FkZXJMaWtlfSByb290MC5tb2RlbFJlY2lwZXNMb2FkZXJcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHJvb3QwLm9wdGlvbnNUaHJvdWdoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5yZWxhdGlvbnNoaXBOYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5yZXNvdXJjZU5hbWVcbiAgICovXG4gIGRlZmluZUhhc01hbnlMb2FkTWV0aG9kICh7Zm9yZWlnbktleSwgbG9hZE1ldGhvZE5hbWUsIE1vZGVsQ2xhc3MsIG1vZGVsQ2xhc3NEYXRhLCBtb2RlbFJlY2lwZXNMb2FkZXIsIG9wdGlvbnNUaHJvdWdoLCByZWxhdGlvbnNoaXBOYW1lLCByZXNvdXJjZU5hbWV9KSB7XG4gICAgTW9kZWxDbGFzcy5wcm90b3R5cGVbbG9hZE1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLnByaW1hcnlLZXkoKVxuICAgICAgY29uc3QgbW9kZWxDbGFzcyA9IG1vZGVsUmVjaXBlc0xvYWRlci5nZXRNb2RlbENsYXNzKHJlc291cmNlTmFtZSlcblxuICAgICAgaWYgKG9wdGlvbnNUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gZGlnZyhtb2RlbENsYXNzRGF0YSwgXCJjbGFzc05hbWVcIilcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZEhhc01hbnlSZWZsZWN0aW9uKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgICAgICBtb2RlbENsYXNzXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgdGhyb3VnaDoge1xuICAgICAgICAgICAgICAgIG1vZGVsOiBtb2RlbENsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICByZWZsZWN0aW9uOiByZWxhdGlvbnNoaXBOYW1lXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhbnNhY2sgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vY29sbGVjdGlvbi5qc1wiKS5Db2xsZWN0aW9uUmFuc2Fja1BhcmFtc30gKi8gKHt9KVxuXG4gICAgICAgIHJhbnNhY2tbYCR7Zm9yZWlnbktleX1fZXFgXSA9IGlkXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRIYXNNYW55UmVmbGVjdGlvbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWZsZWN0aW9uTmFtZTogcmVsYXRpb25zaGlwTmFtZSxcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLFxuICAgICAgICAgICAgbW9kZWxDbGFzc1xuICAgICAgICAgIH0sXG4gICAgICAgICAge3JhbnNhY2t9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZGVmaW5lSGFzT25lR2V0TWV0aGQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByb290MFxuICAgKiBAcGFyYW0ge01vZGVsQ2xhc3NMaWtlfSByb290MC5Nb2RlbENsYXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290MC5tb2RlbE1ldGhvZE5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3QwLnJlbGF0aW9uc2hpcE5hbWVcbiAgICovXG4gIGRlZmluZUhhc09uZUdldE1ldGhkICh7TW9kZWxDbGFzcywgbW9kZWxNZXRob2ROYW1lLCByZWxhdGlvbnNoaXBOYW1lfSkge1xuICAgIE1vZGVsQ2xhc3MucHJvdG90eXBlW21vZGVsTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVhZEhhc09uZVJlZmxlY3Rpb24oe3JlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lfSlcbiAgICB9XG4gIH1cblxuICBkZWZpbmVIYXNPbmVMb2FkTWV0aG9kICh7XG4gICAgYWN0aXZlUmVjb3JkUHJpbWFyeUtleSxcbiAgICBmb3JlaWduS2V5LFxuICAgIGxvYWRNZXRob2ROYW1lLFxuICAgIE1vZGVsQ2xhc3MsXG4gICAgbW9kZWxDbGFzc0RhdGEsXG4gICAgbW9kZWxSZWNpcGVzTG9hZGVyLFxuICAgIG9wdGlvbnNUaHJvdWdoLFxuICAgIHJlbGF0aW9uc2hpcE5hbWUsXG4gICAgcmVzb3VyY2VOYW1lXG4gIH0pIHtcbiAgICBNb2RlbENsYXNzLnByb3RvdHlwZVtsb2FkTWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwcmltYXJ5S2V5TWV0aG9kTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYWN0aXZlUmVjb3JkUHJpbWFyeUtleSwgdHJ1ZSlcblxuICAgICAgaWYgKCEocHJpbWFyeUtleU1ldGhvZE5hbWUgaW4gdGhpcykpIHRocm93IG5ldyBFcnJvcihgUHJpbWFyeSBrZXkgbWV0aG9kIHdhc24ndCBkZWZpbmVkOiAke3ByaW1hcnlLZXlNZXRob2ROYW1lfWApXG5cbiAgICAgIGNvbnN0IGlkID0gdGhpc1twcmltYXJ5S2V5TWV0aG9kTmFtZV0oKVxuICAgICAgY29uc3QgbW9kZWxDbGFzcyA9IG1vZGVsUmVjaXBlc0xvYWRlci5nZXRNb2RlbENsYXNzKHJlc291cmNlTmFtZSlcblxuICAgICAgaWYgKG9wdGlvbnNUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gZGlnZyhtb2RlbENsYXNzRGF0YSwgXCJjbGFzc05hbWVcIilcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZEhhc09uZVJlZmxlY3Rpb24oXG4gICAgICAgICAge3JlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lLCBtb2RlbDogdGhpcywgbW9kZWxDbGFzc30sXG4gICAgICAgICAge3BhcmFtczoge3Rocm91Z2g6IHttb2RlbDogbW9kZWxDbGFzc05hbWUsIGlkLCByZWZsZWN0aW9uOiByZWxhdGlvbnNoaXBOYW1lfX19XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhbnNhY2sgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vY29sbGVjdGlvbi5qc1wiKS5Db2xsZWN0aW9uUmFuc2Fja1BhcmFtc30gKi8gKHt9KVxuXG4gICAgICAgIHJhbnNhY2tbYCR7Zm9yZWlnbktleX1fZXFgXSA9IGlkXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRIYXNPbmVSZWZsZWN0aW9uKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZmxlY3Rpb25OYW1lOiByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgICAgbW9kZWw6IHRoaXMsXG4gICAgICAgICAgICBtb2RlbENsYXNzXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7cmFuc2Fja31cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19