@sinequa/assistant 3.10.4 → 3.10.10

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 (839) hide show
  1. package/chat/index.d.ts +2155 -3
  2. package/fesm2022/sinequa-assistant-chat.mjs +764 -593
  3. package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
  4. package/index.d.ts +3 -5
  5. package/node_modules/zod/LICENSE +21 -0
  6. package/node_modules/zod/README.md +208 -0
  7. package/node_modules/zod/index.cjs +33 -0
  8. package/node_modules/zod/index.d.cts +4 -0
  9. package/node_modules/zod/index.d.ts +4 -0
  10. package/node_modules/zod/index.js +4 -0
  11. package/node_modules/zod/locales/index.cjs +17 -0
  12. package/node_modules/zod/locales/index.d.cts +1 -0
  13. package/node_modules/zod/locales/index.d.ts +1 -0
  14. package/node_modules/zod/locales/index.js +1 -0
  15. package/node_modules/zod/locales/package.json +6 -0
  16. package/node_modules/zod/mini/index.cjs +32 -0
  17. package/node_modules/zod/mini/index.d.cts +3 -0
  18. package/node_modules/zod/mini/index.d.ts +3 -0
  19. package/node_modules/zod/mini/index.js +3 -0
  20. package/node_modules/zod/mini/package.json +6 -0
  21. package/node_modules/zod/package.json +135 -0
  22. package/node_modules/zod/src/index.ts +4 -0
  23. package/node_modules/zod/src/locales/index.ts +1 -0
  24. package/node_modules/zod/src/mini/index.ts +3 -0
  25. package/node_modules/zod/src/v3/ZodError.ts +330 -0
  26. package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
  27. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  28. package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
  29. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
  30. package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
  31. package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
  32. package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
  33. package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
  34. package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
  35. package/node_modules/zod/src/v3/errors.ts +13 -0
  36. package/node_modules/zod/src/v3/external.ts +6 -0
  37. package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
  38. package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
  39. package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
  40. package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
  41. package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
  42. package/node_modules/zod/src/v3/helpers/util.ts +224 -0
  43. package/node_modules/zod/src/v3/index.ts +4 -0
  44. package/node_modules/zod/src/v3/locales/en.ts +124 -0
  45. package/node_modules/zod/src/v3/standard-schema.ts +113 -0
  46. package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
  47. package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
  48. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
  49. package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
  50. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
  51. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
  52. package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
  53. package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
  54. package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
  55. package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
  56. package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
  57. package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
  58. package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
  59. package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
  60. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
  61. package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
  62. package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
  63. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
  64. package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
  65. package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
  66. package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
  67. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  68. package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
  69. package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
  70. package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
  71. package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
  72. package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
  73. package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
  74. package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
  75. package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
  76. package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
  77. package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
  78. package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
  79. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
  80. package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
  81. package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
  82. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
  83. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
  84. package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
  85. package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
  86. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
  87. package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
  88. package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
  89. package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
  90. package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
  91. package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
  92. package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
  93. package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
  94. package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
  95. package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
  96. package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
  97. package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
  98. package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
  99. package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
  100. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
  101. package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
  102. package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
  103. package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
  104. package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
  105. package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
  106. package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
  107. package/node_modules/zod/src/v3/types.ts +5138 -0
  108. package/node_modules/zod/src/v4/classic/checks.ts +32 -0
  109. package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
  110. package/node_modules/zod/src/v4/classic/compat.ts +70 -0
  111. package/node_modules/zod/src/v4/classic/errors.ts +82 -0
  112. package/node_modules/zod/src/v4/classic/external.ts +51 -0
  113. package/node_modules/zod/src/v4/classic/from-json-schema.ts +643 -0
  114. package/node_modules/zod/src/v4/classic/index.ts +5 -0
  115. package/node_modules/zod/src/v4/classic/iso.ts +90 -0
  116. package/node_modules/zod/src/v4/classic/parse.ts +82 -0
  117. package/node_modules/zod/src/v4/classic/schemas.ts +2409 -0
  118. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
  119. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
  120. package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
  121. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
  122. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
  123. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
  124. package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
  125. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
  126. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
  127. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
  128. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
  129. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
  130. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
  131. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
  132. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
  133. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
  134. package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
  135. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
  136. package/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
  137. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  138. package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
  139. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
  140. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
  141. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
  142. package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
  143. package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
  144. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
  145. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  146. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +734 -0
  147. package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
  148. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
  149. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
  150. package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
  151. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
  152. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
  153. package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
  154. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
  155. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
  156. package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
  157. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
  158. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
  159. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
  160. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
  161. package/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
  162. package/node_modules/zod/src/v4/classic/tests/object.test.ts +640 -0
  163. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +223 -0
  164. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +427 -0
  165. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
  166. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
  167. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
  168. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
  169. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
  170. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
  171. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
  172. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
  173. package/node_modules/zod/src/v4/classic/tests/record.test.ts +632 -0
  174. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
  175. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +570 -0
  176. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
  177. package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
  178. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
  179. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
  180. package/node_modules/zod/src/v4/classic/tests/string.test.ts +1175 -0
  181. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
  182. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
  183. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  184. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2990 -0
  185. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
  186. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +183 -0
  187. package/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
  188. package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
  189. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
  190. package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
  191. package/node_modules/zod/src/v4/core/api.ts +1798 -0
  192. package/node_modules/zod/src/v4/core/checks.ts +1293 -0
  193. package/node_modules/zod/src/v4/core/config.ts +15 -0
  194. package/node_modules/zod/src/v4/core/core.ts +138 -0
  195. package/node_modules/zod/src/v4/core/doc.ts +44 -0
  196. package/node_modules/zod/src/v4/core/errors.ts +448 -0
  197. package/node_modules/zod/src/v4/core/index.ts +16 -0
  198. package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
  199. package/node_modules/zod/src/v4/core/json-schema-processors.ts +667 -0
  200. package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
  201. package/node_modules/zod/src/v4/core/parse.ts +195 -0
  202. package/node_modules/zod/src/v4/core/regexes.ts +183 -0
  203. package/node_modules/zod/src/v4/core/registries.ts +105 -0
  204. package/node_modules/zod/src/v4/core/schemas.ts +4538 -0
  205. package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
  206. package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
  207. package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
  208. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
  209. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
  210. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
  211. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
  212. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
  213. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
  214. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
  215. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +83 -0
  216. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
  217. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  218. package/node_modules/zod/src/v4/core/to-json-schema.ts +613 -0
  219. package/node_modules/zod/src/v4/core/util.ts +966 -0
  220. package/node_modules/zod/src/v4/core/versions.ts +5 -0
  221. package/node_modules/zod/src/v4/core/zsf.ts +323 -0
  222. package/node_modules/zod/src/v4/index.ts +4 -0
  223. package/node_modules/zod/src/v4/locales/ar.ts +115 -0
  224. package/node_modules/zod/src/v4/locales/az.ts +111 -0
  225. package/node_modules/zod/src/v4/locales/be.ts +176 -0
  226. package/node_modules/zod/src/v4/locales/bg.ts +128 -0
  227. package/node_modules/zod/src/v4/locales/ca.ts +116 -0
  228. package/node_modules/zod/src/v4/locales/cs.ts +118 -0
  229. package/node_modules/zod/src/v4/locales/da.ts +123 -0
  230. package/node_modules/zod/src/v4/locales/de.ts +116 -0
  231. package/node_modules/zod/src/v4/locales/en.ts +119 -0
  232. package/node_modules/zod/src/v4/locales/eo.ts +118 -0
  233. package/node_modules/zod/src/v4/locales/es.ts +141 -0
  234. package/node_modules/zod/src/v4/locales/fa.ts +126 -0
  235. package/node_modules/zod/src/v4/locales/fi.ts +121 -0
  236. package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
  237. package/node_modules/zod/src/v4/locales/fr.ts +116 -0
  238. package/node_modules/zod/src/v4/locales/he.ts +246 -0
  239. package/node_modules/zod/src/v4/locales/hu.ts +117 -0
  240. package/node_modules/zod/src/v4/locales/hy.ts +164 -0
  241. package/node_modules/zod/src/v4/locales/id.ts +115 -0
  242. package/node_modules/zod/src/v4/locales/index.ts +49 -0
  243. package/node_modules/zod/src/v4/locales/is.ts +119 -0
  244. package/node_modules/zod/src/v4/locales/it.ts +116 -0
  245. package/node_modules/zod/src/v4/locales/ja.ts +114 -0
  246. package/node_modules/zod/src/v4/locales/ka.ts +123 -0
  247. package/node_modules/zod/src/v4/locales/kh.ts +7 -0
  248. package/node_modules/zod/src/v4/locales/km.ts +119 -0
  249. package/node_modules/zod/src/v4/locales/ko.ts +121 -0
  250. package/node_modules/zod/src/v4/locales/lt.ts +239 -0
  251. package/node_modules/zod/src/v4/locales/mk.ts +118 -0
  252. package/node_modules/zod/src/v4/locales/ms.ts +115 -0
  253. package/node_modules/zod/src/v4/locales/nl.ts +121 -0
  254. package/node_modules/zod/src/v4/locales/no.ts +116 -0
  255. package/node_modules/zod/src/v4/locales/ota.ts +117 -0
  256. package/node_modules/zod/src/v4/locales/pl.ts +118 -0
  257. package/node_modules/zod/src/v4/locales/ps.ts +126 -0
  258. package/node_modules/zod/src/v4/locales/pt.ts +116 -0
  259. package/node_modules/zod/src/v4/locales/ru.ts +176 -0
  260. package/node_modules/zod/src/v4/locales/sl.ts +118 -0
  261. package/node_modules/zod/src/v4/locales/sv.ts +119 -0
  262. package/node_modules/zod/src/v4/locales/ta.ts +118 -0
  263. package/node_modules/zod/src/v4/locales/th.ts +119 -0
  264. package/node_modules/zod/src/v4/locales/tr.ts +111 -0
  265. package/node_modules/zod/src/v4/locales/ua.ts +7 -0
  266. package/node_modules/zod/src/v4/locales/uk.ts +117 -0
  267. package/node_modules/zod/src/v4/locales/ur.ts +119 -0
  268. package/node_modules/zod/src/v4/locales/uz.ts +116 -0
  269. package/node_modules/zod/src/v4/locales/vi.ts +117 -0
  270. package/node_modules/zod/src/v4/locales/yo.ts +124 -0
  271. package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
  272. package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
  273. package/node_modules/zod/src/v4/mini/checks.ts +32 -0
  274. package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
  275. package/node_modules/zod/src/v4/mini/external.ts +40 -0
  276. package/node_modules/zod/src/v4/mini/index.ts +3 -0
  277. package/node_modules/zod/src/v4/mini/iso.ts +66 -0
  278. package/node_modules/zod/src/v4/mini/parse.ts +14 -0
  279. package/node_modules/zod/src/v4/mini/schemas.ts +1916 -0
  280. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
  281. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
  282. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
  283. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
  284. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
  285. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
  286. package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
  287. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
  288. package/node_modules/zod/src/v4/mini/tests/index.test.ts +963 -0
  289. package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
  290. package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
  291. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
  292. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
  293. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
  294. package/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
  295. package/node_modules/zod/src/v4-mini/index.ts +3 -0
  296. package/node_modules/zod/v3/ZodError.cjs +138 -0
  297. package/node_modules/zod/v3/ZodError.d.cts +164 -0
  298. package/node_modules/zod/v3/ZodError.d.ts +164 -0
  299. package/node_modules/zod/v3/ZodError.js +133 -0
  300. package/node_modules/zod/v3/errors.cjs +17 -0
  301. package/node_modules/zod/v3/errors.d.cts +5 -0
  302. package/node_modules/zod/v3/errors.d.ts +5 -0
  303. package/node_modules/zod/v3/errors.js +9 -0
  304. package/node_modules/zod/v3/external.cjs +22 -0
  305. package/node_modules/zod/v3/external.d.cts +6 -0
  306. package/node_modules/zod/v3/external.d.ts +6 -0
  307. package/node_modules/zod/v3/external.js +6 -0
  308. package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  309. package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  310. package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  311. package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  312. package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  313. package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  314. package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  315. package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  316. package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  317. package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  318. package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  319. package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  320. package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  321. package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  322. package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  323. package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  324. package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  325. package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  326. package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  327. package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  328. package/node_modules/zod/v3/helpers/util.cjs +137 -0
  329. package/node_modules/zod/v3/helpers/util.d.cts +85 -0
  330. package/node_modules/zod/v3/helpers/util.d.ts +85 -0
  331. package/node_modules/zod/v3/helpers/util.js +133 -0
  332. package/node_modules/zod/v3/index.cjs +33 -0
  333. package/node_modules/zod/v3/index.d.cts +4 -0
  334. package/node_modules/zod/v3/index.d.ts +4 -0
  335. package/node_modules/zod/v3/index.js +4 -0
  336. package/node_modules/zod/v3/locales/en.cjs +112 -0
  337. package/node_modules/zod/v3/locales/en.d.cts +3 -0
  338. package/node_modules/zod/v3/locales/en.d.ts +3 -0
  339. package/node_modules/zod/v3/locales/en.js +109 -0
  340. package/node_modules/zod/v3/package.json +6 -0
  341. package/node_modules/zod/v3/standard-schema.cjs +2 -0
  342. package/node_modules/zod/v3/standard-schema.d.cts +102 -0
  343. package/node_modules/zod/v3/standard-schema.d.ts +102 -0
  344. package/node_modules/zod/v3/standard-schema.js +1 -0
  345. package/node_modules/zod/v3/types.cjs +3777 -0
  346. package/node_modules/zod/v3/types.d.cts +1034 -0
  347. package/node_modules/zod/v3/types.d.ts +1034 -0
  348. package/node_modules/zod/v3/types.js +3695 -0
  349. package/node_modules/zod/v4/classic/checks.cjs +33 -0
  350. package/node_modules/zod/v4/classic/checks.d.cts +1 -0
  351. package/node_modules/zod/v4/classic/checks.d.ts +1 -0
  352. package/node_modules/zod/v4/classic/checks.js +1 -0
  353. package/node_modules/zod/v4/classic/coerce.cjs +47 -0
  354. package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  355. package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  356. package/node_modules/zod/v4/classic/coerce.js +17 -0
  357. package/node_modules/zod/v4/classic/compat.cjs +61 -0
  358. package/node_modules/zod/v4/classic/compat.d.cts +50 -0
  359. package/node_modules/zod/v4/classic/compat.d.ts +50 -0
  360. package/node_modules/zod/v4/classic/compat.js +31 -0
  361. package/node_modules/zod/v4/classic/errors.cjs +74 -0
  362. package/node_modules/zod/v4/classic/errors.d.cts +30 -0
  363. package/node_modules/zod/v4/classic/errors.d.ts +30 -0
  364. package/node_modules/zod/v4/classic/errors.js +48 -0
  365. package/node_modules/zod/v4/classic/external.cjs +73 -0
  366. package/node_modules/zod/v4/classic/external.d.cts +15 -0
  367. package/node_modules/zod/v4/classic/external.d.ts +15 -0
  368. package/node_modules/zod/v4/classic/external.js +20 -0
  369. package/node_modules/zod/v4/classic/from-json-schema.cjs +610 -0
  370. package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
  371. package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
  372. package/node_modules/zod/v4/classic/from-json-schema.js +584 -0
  373. package/node_modules/zod/v4/classic/index.cjs +33 -0
  374. package/node_modules/zod/v4/classic/index.d.cts +4 -0
  375. package/node_modules/zod/v4/classic/index.d.ts +4 -0
  376. package/node_modules/zod/v4/classic/index.js +4 -0
  377. package/node_modules/zod/v4/classic/iso.cjs +60 -0
  378. package/node_modules/zod/v4/classic/iso.d.cts +22 -0
  379. package/node_modules/zod/v4/classic/iso.d.ts +22 -0
  380. package/node_modules/zod/v4/classic/iso.js +30 -0
  381. package/node_modules/zod/v4/classic/package.json +6 -0
  382. package/node_modules/zod/v4/classic/parse.cjs +41 -0
  383. package/node_modules/zod/v4/classic/parse.d.cts +31 -0
  384. package/node_modules/zod/v4/classic/parse.d.ts +31 -0
  385. package/node_modules/zod/v4/classic/parse.js +15 -0
  386. package/node_modules/zod/v4/classic/schemas.cjs +1272 -0
  387. package/node_modules/zod/v4/classic/schemas.d.cts +739 -0
  388. package/node_modules/zod/v4/classic/schemas.d.ts +739 -0
  389. package/node_modules/zod/v4/classic/schemas.js +1157 -0
  390. package/node_modules/zod/v4/core/api.cjs +1222 -0
  391. package/node_modules/zod/v4/core/api.d.cts +304 -0
  392. package/node_modules/zod/v4/core/api.d.ts +304 -0
  393. package/node_modules/zod/v4/core/api.js +1082 -0
  394. package/node_modules/zod/v4/core/checks.cjs +601 -0
  395. package/node_modules/zod/v4/core/checks.d.cts +278 -0
  396. package/node_modules/zod/v4/core/checks.d.ts +278 -0
  397. package/node_modules/zod/v4/core/checks.js +575 -0
  398. package/node_modules/zod/v4/core/core.cjs +83 -0
  399. package/node_modules/zod/v4/core/core.d.cts +70 -0
  400. package/node_modules/zod/v4/core/core.d.ts +70 -0
  401. package/node_modules/zod/v4/core/core.js +76 -0
  402. package/node_modules/zod/v4/core/doc.cjs +39 -0
  403. package/node_modules/zod/v4/core/doc.d.cts +14 -0
  404. package/node_modules/zod/v4/core/doc.d.ts +14 -0
  405. package/node_modules/zod/v4/core/doc.js +35 -0
  406. package/node_modules/zod/v4/core/errors.cjs +213 -0
  407. package/node_modules/zod/v4/core/errors.d.cts +220 -0
  408. package/node_modules/zod/v4/core/errors.d.ts +220 -0
  409. package/node_modules/zod/v4/core/errors.js +182 -0
  410. package/node_modules/zod/v4/core/index.cjs +47 -0
  411. package/node_modules/zod/v4/core/index.d.cts +16 -0
  412. package/node_modules/zod/v4/core/index.d.ts +16 -0
  413. package/node_modules/zod/v4/core/index.js +16 -0
  414. package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
  415. package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
  416. package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
  417. package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  418. package/node_modules/zod/v4/core/json-schema-processors.cjs +648 -0
  419. package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
  420. package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
  421. package/node_modules/zod/v4/core/json-schema-processors.js +605 -0
  422. package/node_modules/zod/v4/core/json-schema.cjs +2 -0
  423. package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
  424. package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
  425. package/node_modules/zod/v4/core/json-schema.js +1 -0
  426. package/node_modules/zod/v4/core/package.json +6 -0
  427. package/node_modules/zod/v4/core/parse.cjs +131 -0
  428. package/node_modules/zod/v4/core/parse.d.cts +49 -0
  429. package/node_modules/zod/v4/core/parse.d.ts +49 -0
  430. package/node_modules/zod/v4/core/parse.js +93 -0
  431. package/node_modules/zod/v4/core/regexes.cjs +166 -0
  432. package/node_modules/zod/v4/core/regexes.d.cts +79 -0
  433. package/node_modules/zod/v4/core/regexes.d.ts +79 -0
  434. package/node_modules/zod/v4/core/regexes.js +133 -0
  435. package/node_modules/zod/v4/core/registries.cjs +56 -0
  436. package/node_modules/zod/v4/core/registries.d.cts +35 -0
  437. package/node_modules/zod/v4/core/registries.d.ts +35 -0
  438. package/node_modules/zod/v4/core/registries.js +51 -0
  439. package/node_modules/zod/v4/core/schemas.cjs +2124 -0
  440. package/node_modules/zod/v4/core/schemas.d.cts +1146 -0
  441. package/node_modules/zod/v4/core/schemas.d.ts +1146 -0
  442. package/node_modules/zod/v4/core/schemas.js +2093 -0
  443. package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  444. package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
  445. package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
  446. package/node_modules/zod/v4/core/standard-schema.js +1 -0
  447. package/node_modules/zod/v4/core/to-json-schema.cjs +446 -0
  448. package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
  449. package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
  450. package/node_modules/zod/v4/core/to-json-schema.js +437 -0
  451. package/node_modules/zod/v4/core/util.cjs +710 -0
  452. package/node_modules/zod/v4/core/util.d.cts +199 -0
  453. package/node_modules/zod/v4/core/util.d.ts +199 -0
  454. package/node_modules/zod/v4/core/util.js +651 -0
  455. package/node_modules/zod/v4/core/versions.cjs +8 -0
  456. package/node_modules/zod/v4/core/versions.d.cts +5 -0
  457. package/node_modules/zod/v4/core/versions.d.ts +5 -0
  458. package/node_modules/zod/v4/core/versions.js +5 -0
  459. package/node_modules/zod/v4/index.cjs +22 -0
  460. package/node_modules/zod/v4/index.d.cts +3 -0
  461. package/node_modules/zod/v4/index.d.ts +3 -0
  462. package/node_modules/zod/v4/index.js +3 -0
  463. package/node_modules/zod/v4/locales/ar.cjs +133 -0
  464. package/node_modules/zod/v4/locales/ar.d.cts +5 -0
  465. package/node_modules/zod/v4/locales/ar.d.ts +4 -0
  466. package/node_modules/zod/v4/locales/ar.js +106 -0
  467. package/node_modules/zod/v4/locales/az.cjs +132 -0
  468. package/node_modules/zod/v4/locales/az.d.cts +5 -0
  469. package/node_modules/zod/v4/locales/az.d.ts +4 -0
  470. package/node_modules/zod/v4/locales/az.js +105 -0
  471. package/node_modules/zod/v4/locales/be.cjs +183 -0
  472. package/node_modules/zod/v4/locales/be.d.cts +5 -0
  473. package/node_modules/zod/v4/locales/be.d.ts +4 -0
  474. package/node_modules/zod/v4/locales/be.js +156 -0
  475. package/node_modules/zod/v4/locales/bg.cjs +147 -0
  476. package/node_modules/zod/v4/locales/bg.d.cts +5 -0
  477. package/node_modules/zod/v4/locales/bg.d.ts +4 -0
  478. package/node_modules/zod/v4/locales/bg.js +120 -0
  479. package/node_modules/zod/v4/locales/ca.cjs +134 -0
  480. package/node_modules/zod/v4/locales/ca.d.cts +5 -0
  481. package/node_modules/zod/v4/locales/ca.d.ts +4 -0
  482. package/node_modules/zod/v4/locales/ca.js +107 -0
  483. package/node_modules/zod/v4/locales/cs.cjs +138 -0
  484. package/node_modules/zod/v4/locales/cs.d.cts +5 -0
  485. package/node_modules/zod/v4/locales/cs.d.ts +4 -0
  486. package/node_modules/zod/v4/locales/cs.js +111 -0
  487. package/node_modules/zod/v4/locales/da.cjs +142 -0
  488. package/node_modules/zod/v4/locales/da.d.cts +5 -0
  489. package/node_modules/zod/v4/locales/da.d.ts +4 -0
  490. package/node_modules/zod/v4/locales/da.js +115 -0
  491. package/node_modules/zod/v4/locales/de.cjs +135 -0
  492. package/node_modules/zod/v4/locales/de.d.cts +5 -0
  493. package/node_modules/zod/v4/locales/de.d.ts +4 -0
  494. package/node_modules/zod/v4/locales/de.js +108 -0
  495. package/node_modules/zod/v4/locales/en.cjs +136 -0
  496. package/node_modules/zod/v4/locales/en.d.cts +5 -0
  497. package/node_modules/zod/v4/locales/en.d.ts +4 -0
  498. package/node_modules/zod/v4/locales/en.js +109 -0
  499. package/node_modules/zod/v4/locales/eo.cjs +136 -0
  500. package/node_modules/zod/v4/locales/eo.d.cts +5 -0
  501. package/node_modules/zod/v4/locales/eo.d.ts +4 -0
  502. package/node_modules/zod/v4/locales/eo.js +109 -0
  503. package/node_modules/zod/v4/locales/es.cjs +159 -0
  504. package/node_modules/zod/v4/locales/es.d.cts +5 -0
  505. package/node_modules/zod/v4/locales/es.d.ts +4 -0
  506. package/node_modules/zod/v4/locales/es.js +132 -0
  507. package/node_modules/zod/v4/locales/fa.cjs +141 -0
  508. package/node_modules/zod/v4/locales/fa.d.cts +5 -0
  509. package/node_modules/zod/v4/locales/fa.d.ts +4 -0
  510. package/node_modules/zod/v4/locales/fa.js +114 -0
  511. package/node_modules/zod/v4/locales/fi.cjs +139 -0
  512. package/node_modules/zod/v4/locales/fi.d.cts +5 -0
  513. package/node_modules/zod/v4/locales/fi.d.ts +4 -0
  514. package/node_modules/zod/v4/locales/fi.js +112 -0
  515. package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
  516. package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
  517. package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  518. package/node_modules/zod/v4/locales/fr-CA.js +107 -0
  519. package/node_modules/zod/v4/locales/fr.cjs +135 -0
  520. package/node_modules/zod/v4/locales/fr.d.cts +5 -0
  521. package/node_modules/zod/v4/locales/fr.d.ts +4 -0
  522. package/node_modules/zod/v4/locales/fr.js +108 -0
  523. package/node_modules/zod/v4/locales/he.cjs +241 -0
  524. package/node_modules/zod/v4/locales/he.d.cts +5 -0
  525. package/node_modules/zod/v4/locales/he.d.ts +4 -0
  526. package/node_modules/zod/v4/locales/he.js +214 -0
  527. package/node_modules/zod/v4/locales/hu.cjs +135 -0
  528. package/node_modules/zod/v4/locales/hu.d.cts +5 -0
  529. package/node_modules/zod/v4/locales/hu.d.ts +4 -0
  530. package/node_modules/zod/v4/locales/hu.js +108 -0
  531. package/node_modules/zod/v4/locales/hy.cjs +174 -0
  532. package/node_modules/zod/v4/locales/hy.d.cts +5 -0
  533. package/node_modules/zod/v4/locales/hy.d.ts +4 -0
  534. package/node_modules/zod/v4/locales/hy.js +147 -0
  535. package/node_modules/zod/v4/locales/id.cjs +133 -0
  536. package/node_modules/zod/v4/locales/id.d.cts +5 -0
  537. package/node_modules/zod/v4/locales/id.d.ts +4 -0
  538. package/node_modules/zod/v4/locales/id.js +106 -0
  539. package/node_modules/zod/v4/locales/index.cjs +104 -0
  540. package/node_modules/zod/v4/locales/index.d.cts +49 -0
  541. package/node_modules/zod/v4/locales/index.d.ts +49 -0
  542. package/node_modules/zod/v4/locales/index.js +49 -0
  543. package/node_modules/zod/v4/locales/is.cjs +136 -0
  544. package/node_modules/zod/v4/locales/is.d.cts +5 -0
  545. package/node_modules/zod/v4/locales/is.d.ts +4 -0
  546. package/node_modules/zod/v4/locales/is.js +109 -0
  547. package/node_modules/zod/v4/locales/it.cjs +135 -0
  548. package/node_modules/zod/v4/locales/it.d.cts +5 -0
  549. package/node_modules/zod/v4/locales/it.d.ts +4 -0
  550. package/node_modules/zod/v4/locales/it.js +108 -0
  551. package/node_modules/zod/v4/locales/ja.cjs +134 -0
  552. package/node_modules/zod/v4/locales/ja.d.cts +5 -0
  553. package/node_modules/zod/v4/locales/ja.d.ts +4 -0
  554. package/node_modules/zod/v4/locales/ja.js +107 -0
  555. package/node_modules/zod/v4/locales/ka.cjs +139 -0
  556. package/node_modules/zod/v4/locales/ka.d.cts +5 -0
  557. package/node_modules/zod/v4/locales/ka.d.ts +4 -0
  558. package/node_modules/zod/v4/locales/ka.js +112 -0
  559. package/node_modules/zod/v4/locales/kh.cjs +12 -0
  560. package/node_modules/zod/v4/locales/kh.d.cts +5 -0
  561. package/node_modules/zod/v4/locales/kh.d.ts +5 -0
  562. package/node_modules/zod/v4/locales/kh.js +5 -0
  563. package/node_modules/zod/v4/locales/km.cjs +137 -0
  564. package/node_modules/zod/v4/locales/km.d.cts +5 -0
  565. package/node_modules/zod/v4/locales/km.d.ts +4 -0
  566. package/node_modules/zod/v4/locales/km.js +110 -0
  567. package/node_modules/zod/v4/locales/ko.cjs +138 -0
  568. package/node_modules/zod/v4/locales/ko.d.cts +5 -0
  569. package/node_modules/zod/v4/locales/ko.d.ts +4 -0
  570. package/node_modules/zod/v4/locales/ko.js +111 -0
  571. package/node_modules/zod/v4/locales/lt.cjs +230 -0
  572. package/node_modules/zod/v4/locales/lt.d.cts +5 -0
  573. package/node_modules/zod/v4/locales/lt.d.ts +4 -0
  574. package/node_modules/zod/v4/locales/lt.js +203 -0
  575. package/node_modules/zod/v4/locales/mk.cjs +136 -0
  576. package/node_modules/zod/v4/locales/mk.d.cts +5 -0
  577. package/node_modules/zod/v4/locales/mk.d.ts +4 -0
  578. package/node_modules/zod/v4/locales/mk.js +109 -0
  579. package/node_modules/zod/v4/locales/ms.cjs +134 -0
  580. package/node_modules/zod/v4/locales/ms.d.cts +5 -0
  581. package/node_modules/zod/v4/locales/ms.d.ts +4 -0
  582. package/node_modules/zod/v4/locales/ms.js +107 -0
  583. package/node_modules/zod/v4/locales/nl.cjs +137 -0
  584. package/node_modules/zod/v4/locales/nl.d.cts +5 -0
  585. package/node_modules/zod/v4/locales/nl.d.ts +4 -0
  586. package/node_modules/zod/v4/locales/nl.js +110 -0
  587. package/node_modules/zod/v4/locales/no.cjs +135 -0
  588. package/node_modules/zod/v4/locales/no.d.cts +5 -0
  589. package/node_modules/zod/v4/locales/no.d.ts +4 -0
  590. package/node_modules/zod/v4/locales/no.js +108 -0
  591. package/node_modules/zod/v4/locales/ota.cjs +136 -0
  592. package/node_modules/zod/v4/locales/ota.d.cts +5 -0
  593. package/node_modules/zod/v4/locales/ota.d.ts +4 -0
  594. package/node_modules/zod/v4/locales/ota.js +109 -0
  595. package/node_modules/zod/v4/locales/package.json +6 -0
  596. package/node_modules/zod/v4/locales/pl.cjs +136 -0
  597. package/node_modules/zod/v4/locales/pl.d.cts +5 -0
  598. package/node_modules/zod/v4/locales/pl.d.ts +4 -0
  599. package/node_modules/zod/v4/locales/pl.js +109 -0
  600. package/node_modules/zod/v4/locales/ps.cjs +141 -0
  601. package/node_modules/zod/v4/locales/ps.d.cts +5 -0
  602. package/node_modules/zod/v4/locales/ps.d.ts +4 -0
  603. package/node_modules/zod/v4/locales/ps.js +114 -0
  604. package/node_modules/zod/v4/locales/pt.cjs +135 -0
  605. package/node_modules/zod/v4/locales/pt.d.cts +5 -0
  606. package/node_modules/zod/v4/locales/pt.d.ts +4 -0
  607. package/node_modules/zod/v4/locales/pt.js +108 -0
  608. package/node_modules/zod/v4/locales/ru.cjs +183 -0
  609. package/node_modules/zod/v4/locales/ru.d.cts +5 -0
  610. package/node_modules/zod/v4/locales/ru.d.ts +4 -0
  611. package/node_modules/zod/v4/locales/ru.js +156 -0
  612. package/node_modules/zod/v4/locales/sl.cjs +136 -0
  613. package/node_modules/zod/v4/locales/sl.d.cts +5 -0
  614. package/node_modules/zod/v4/locales/sl.d.ts +4 -0
  615. package/node_modules/zod/v4/locales/sl.js +109 -0
  616. package/node_modules/zod/v4/locales/sv.cjs +137 -0
  617. package/node_modules/zod/v4/locales/sv.d.cts +5 -0
  618. package/node_modules/zod/v4/locales/sv.d.ts +4 -0
  619. package/node_modules/zod/v4/locales/sv.js +110 -0
  620. package/node_modules/zod/v4/locales/ta.cjs +137 -0
  621. package/node_modules/zod/v4/locales/ta.d.cts +5 -0
  622. package/node_modules/zod/v4/locales/ta.d.ts +4 -0
  623. package/node_modules/zod/v4/locales/ta.js +110 -0
  624. package/node_modules/zod/v4/locales/th.cjs +137 -0
  625. package/node_modules/zod/v4/locales/th.d.cts +5 -0
  626. package/node_modules/zod/v4/locales/th.d.ts +4 -0
  627. package/node_modules/zod/v4/locales/th.js +110 -0
  628. package/node_modules/zod/v4/locales/tr.cjs +132 -0
  629. package/node_modules/zod/v4/locales/tr.d.cts +5 -0
  630. package/node_modules/zod/v4/locales/tr.d.ts +4 -0
  631. package/node_modules/zod/v4/locales/tr.js +105 -0
  632. package/node_modules/zod/v4/locales/ua.cjs +12 -0
  633. package/node_modules/zod/v4/locales/ua.d.cts +5 -0
  634. package/node_modules/zod/v4/locales/ua.d.ts +5 -0
  635. package/node_modules/zod/v4/locales/ua.js +5 -0
  636. package/node_modules/zod/v4/locales/uk.cjs +135 -0
  637. package/node_modules/zod/v4/locales/uk.d.cts +5 -0
  638. package/node_modules/zod/v4/locales/uk.d.ts +4 -0
  639. package/node_modules/zod/v4/locales/uk.js +108 -0
  640. package/node_modules/zod/v4/locales/ur.cjs +137 -0
  641. package/node_modules/zod/v4/locales/ur.d.cts +5 -0
  642. package/node_modules/zod/v4/locales/ur.d.ts +4 -0
  643. package/node_modules/zod/v4/locales/ur.js +110 -0
  644. package/node_modules/zod/v4/locales/uz.cjs +136 -0
  645. package/node_modules/zod/v4/locales/uz.d.cts +5 -0
  646. package/node_modules/zod/v4/locales/uz.d.ts +4 -0
  647. package/node_modules/zod/v4/locales/uz.js +109 -0
  648. package/node_modules/zod/v4/locales/vi.cjs +135 -0
  649. package/node_modules/zod/v4/locales/vi.d.cts +5 -0
  650. package/node_modules/zod/v4/locales/vi.d.ts +4 -0
  651. package/node_modules/zod/v4/locales/vi.js +108 -0
  652. package/node_modules/zod/v4/locales/yo.cjs +134 -0
  653. package/node_modules/zod/v4/locales/yo.d.cts +5 -0
  654. package/node_modules/zod/v4/locales/yo.d.ts +4 -0
  655. package/node_modules/zod/v4/locales/yo.js +107 -0
  656. package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
  657. package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
  658. package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  659. package/node_modules/zod/v4/locales/zh-CN.js +109 -0
  660. package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
  661. package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
  662. package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  663. package/node_modules/zod/v4/locales/zh-TW.js +107 -0
  664. package/node_modules/zod/v4/mini/checks.cjs +34 -0
  665. package/node_modules/zod/v4/mini/checks.d.cts +1 -0
  666. package/node_modules/zod/v4/mini/checks.d.ts +1 -0
  667. package/node_modules/zod/v4/mini/checks.js +1 -0
  668. package/node_modules/zod/v4/mini/coerce.cjs +52 -0
  669. package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  670. package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  671. package/node_modules/zod/v4/mini/coerce.js +22 -0
  672. package/node_modules/zod/v4/mini/external.cjs +63 -0
  673. package/node_modules/zod/v4/mini/external.d.cts +12 -0
  674. package/node_modules/zod/v4/mini/external.d.ts +12 -0
  675. package/node_modules/zod/v4/mini/external.js +14 -0
  676. package/node_modules/zod/v4/mini/index.cjs +32 -0
  677. package/node_modules/zod/v4/mini/index.d.cts +3 -0
  678. package/node_modules/zod/v4/mini/index.d.ts +3 -0
  679. package/node_modules/zod/v4/mini/index.js +3 -0
  680. package/node_modules/zod/v4/mini/iso.cjs +64 -0
  681. package/node_modules/zod/v4/mini/iso.d.cts +22 -0
  682. package/node_modules/zod/v4/mini/iso.d.ts +22 -0
  683. package/node_modules/zod/v4/mini/iso.js +34 -0
  684. package/node_modules/zod/v4/mini/package.json +6 -0
  685. package/node_modules/zod/v4/mini/parse.cjs +16 -0
  686. package/node_modules/zod/v4/mini/parse.d.cts +1 -0
  687. package/node_modules/zod/v4/mini/parse.d.ts +1 -0
  688. package/node_modules/zod/v4/mini/parse.js +1 -0
  689. package/node_modules/zod/v4/mini/schemas.cjs +1046 -0
  690. package/node_modules/zod/v4/mini/schemas.d.cts +427 -0
  691. package/node_modules/zod/v4/mini/schemas.d.ts +427 -0
  692. package/node_modules/zod/v4/mini/schemas.js +925 -0
  693. package/node_modules/zod/v4/package.json +6 -0
  694. package/node_modules/zod/v4-mini/index.cjs +32 -0
  695. package/node_modules/zod/v4-mini/index.d.cts +3 -0
  696. package/node_modules/zod/v4-mini/index.d.ts +3 -0
  697. package/node_modules/zod/v4-mini/index.js +3 -0
  698. package/node_modules/zod/v4-mini/package.json +6 -0
  699. package/package.json +11 -10
  700. package/chat/charts/chart/chart.component.d.ts +0 -13
  701. package/chat/chat-message/chat-message.component.d.ts +0 -75
  702. package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +0 -48
  703. package/chat/chat.component.d.ts +0 -387
  704. package/chat/chat.service.d.ts +0 -370
  705. package/chat/custom-elements/components/code-block.component.d.ts +0 -11
  706. package/chat/custom-elements/components/document-reference.component.d.ts +0 -13
  707. package/chat/custom-elements/components/image-reference.component.d.ts +0 -14
  708. package/chat/custom-elements/components/page-reference.component.d.ts +0 -14
  709. package/chat/custom-elements/components/table-tools.component.d.ts +0 -11
  710. package/chat/custom-elements/custom-elements.config.d.ts +0 -2
  711. package/chat/custom-elements/custom-elements.service.d.ts +0 -14
  712. package/chat/debug-message/debug-message-details/debug-message-details.component.d.ts +0 -18
  713. package/chat/debug-message/debug-message.component.d.ts +0 -14
  714. package/chat/debug-message/debug-message.service.d.ts +0 -15
  715. package/chat/dialogs/delete-saved-chat.component.d.ts +0 -22
  716. package/chat/dialogs/rename-saved-chat.component.d.ts +0 -21
  717. package/chat/dialogs/updates.component.d.ts +0 -15
  718. package/chat/documents-upload/document-list/document-list.component.d.ts +0 -64
  719. package/chat/documents-upload/document-overview/document-overview.component.d.ts +0 -17
  720. package/chat/documents-upload/document-upload/document-upload.component.d.ts +0 -91
  721. package/chat/documents-upload/documents-upload.model.d.ts +0 -66
  722. package/chat/documents-upload/documents-upload.service.d.ts +0 -161
  723. package/chat/fetch-patcher/app-injector.d.ts +0 -9
  724. package/chat/fetch-patcher/fetch-patcher.d.ts +0 -31
  725. package/chat/fetch-patcher/global-error-handler.service.d.ts +0 -36
  726. package/chat/fetch-patcher/handle-unauthorized-logic.d.ts +0 -13
  727. package/chat/format-icon/format-icon.component.d.ts +0 -10
  728. package/chat/format-icon/icons.d.ts +0 -5
  729. package/chat/initials-avatar/initials-avatar.component.d.ts +0 -35
  730. package/chat/instance-manager.service.d.ts +0 -28
  731. package/chat/markdown-it/markdown-it.config.d.ts +0 -4
  732. package/chat/markdown-it/plugins/code-block.plugin.d.ts +0 -2
  733. package/chat/markdown-it/plugins/document-reference.plugin.d.ts +0 -8
  734. package/chat/markdown-it/plugins/image-reference.plugin.d.ts +0 -9
  735. package/chat/markdown-it/plugins/link.plugin.d.ts +0 -5
  736. package/chat/markdown-it/plugins/page-reference.plugin.d.ts +0 -9
  737. package/chat/markdown-it/plugins/table-tools.plugin.d.ts +0 -2
  738. package/chat/pipes/message-content.pipe.d.ts +0 -16
  739. package/chat/public-api.d.ts +0 -35
  740. package/chat/references/chat-reference/chat-reference.component.d.ts +0 -24
  741. package/chat/references/chat-reference-image/chat-reference-image.component.d.ts +0 -20
  742. package/chat/references/chat-reference-page/chat-reference-page.component.d.ts +0 -20
  743. package/chat/saved-chats/saved-chats.component.d.ts +0 -37
  744. package/chat/saved-chats/saved-chats.service.d.ts +0 -29
  745. package/chat/services/app.service.d.ts +0 -9
  746. package/chat/services/assistant-configuration.service.d.ts +0 -34
  747. package/chat/services/assistant-metadata.service.d.ts +0 -20
  748. package/chat/services/assistant-tokens-tracking.service.d.ts +0 -23
  749. package/chat/services/assistant-ws-frames.service.d.ts +0 -50
  750. package/chat/services/dialog.service.d.ts +0 -12
  751. package/chat/services/notification.service.d.ts +0 -10
  752. package/chat/services/principal.service.d.ts +0 -7
  753. package/chat/services/search.service.d.ts +0 -7
  754. package/chat/services/signalR-connection.service.d.ts +0 -25
  755. package/chat/services/signalR.web.service.d.ts +0 -35
  756. package/chat/services/ui.service.d.ts +0 -13
  757. package/chat/services/user-settings.service.d.ts +0 -7
  758. package/chat/smart-renderer/smart-renderer.d.ts +0 -25
  759. package/chat/token-progress-bar/token-progress-bar.component.d.ts +0 -24
  760. package/chat/tooltip/tooltip.component.d.ts +0 -12
  761. package/chat/tooltip/tooltip.directive.d.ts +0 -81
  762. package/chat/types/message-content.types.d.ts +0 -54
  763. package/chat/types/message-reference.types.d.ts +0 -14
  764. package/chat/types.d.ts +0 -920
  765. package/chat/utils/assistant-json.d.ts +0 -2
  766. package/chat/utils/utils.service.d.ts +0 -67
  767. package/chat/version.d.ts +0 -1
  768. package/esm2022/chat/charts/chart/chart.component.mjs +0 -40
  769. package/esm2022/chat/chat-message/chat-message.component.mjs +0 -252
  770. package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -121
  771. package/esm2022/chat/chat.component.mjs +0 -1115
  772. package/esm2022/chat/chat.service.mjs +0 -636
  773. package/esm2022/chat/custom-elements/components/code-block.component.mjs +0 -97
  774. package/esm2022/chat/custom-elements/components/document-reference.component.mjs +0 -85
  775. package/esm2022/chat/custom-elements/components/image-reference.component.mjs +0 -79
  776. package/esm2022/chat/custom-elements/components/page-reference.component.mjs +0 -79
  777. package/esm2022/chat/custom-elements/components/table-tools.component.mjs +0 -111
  778. package/esm2022/chat/custom-elements/custom-elements.config.mjs +0 -6
  779. package/esm2022/chat/custom-elements/custom-elements.service.mjs +0 -35
  780. package/esm2022/chat/debug-message/debug-message-details/debug-message-details.component.mjs +0 -43
  781. package/esm2022/chat/debug-message/debug-message.component.mjs +0 -40
  782. package/esm2022/chat/debug-message/debug-message.service.mjs +0 -49
  783. package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +0 -81
  784. package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +0 -85
  785. package/esm2022/chat/dialogs/updates.component.mjs +0 -61
  786. package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +0 -141
  787. package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +0 -42
  788. package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +0 -254
  789. package/esm2022/chat/documents-upload/documents-upload.model.mjs +0 -2
  790. package/esm2022/chat/documents-upload/documents-upload.service.mjs +0 -274
  791. package/esm2022/chat/fetch-patcher/app-injector.mjs +0 -19
  792. package/esm2022/chat/fetch-patcher/fetch-patcher.mjs +0 -62
  793. package/esm2022/chat/fetch-patcher/global-error-handler.service.mjs +0 -92
  794. package/esm2022/chat/fetch-patcher/handle-unauthorized-logic.mjs +0 -19
  795. package/esm2022/chat/format-icon/format-icon.component.mjs +0 -23
  796. package/esm2022/chat/format-icon/icons.mjs +0 -138
  797. package/esm2022/chat/initials-avatar/initials-avatar.component.mjs +0 -60
  798. package/esm2022/chat/instance-manager.service.mjs +0 -46
  799. package/esm2022/chat/markdown-it/markdown-it.config.mjs +0 -6
  800. package/esm2022/chat/markdown-it/plugins/code-block.plugin.mjs +0 -14
  801. package/esm2022/chat/markdown-it/plugins/document-reference.plugin.mjs +0 -66
  802. package/esm2022/chat/markdown-it/plugins/image-reference.plugin.mjs +0 -67
  803. package/esm2022/chat/markdown-it/plugins/link.plugin.mjs +0 -15
  804. package/esm2022/chat/markdown-it/plugins/page-reference.plugin.mjs +0 -67
  805. package/esm2022/chat/markdown-it/plugins/table-tools.plugin.mjs +0 -12
  806. package/esm2022/chat/pipes/message-content.pipe.mjs +0 -37
  807. package/esm2022/chat/public-api.mjs +0 -37
  808. package/esm2022/chat/references/chat-reference/chat-reference.component.mjs +0 -72
  809. package/esm2022/chat/references/chat-reference-image/chat-reference-image.component.mjs +0 -42
  810. package/esm2022/chat/references/chat-reference-page/chat-reference-page.component.mjs +0 -42
  811. package/esm2022/chat/saved-chats/saved-chats.component.mjs +0 -115
  812. package/esm2022/chat/saved-chats/saved-chats.service.mjs +0 -170
  813. package/esm2022/chat/services/app.service.mjs +0 -30
  814. package/esm2022/chat/services/assistant-configuration.service.mjs +0 -158
  815. package/esm2022/chat/services/assistant-metadata.service.mjs +0 -85
  816. package/esm2022/chat/services/assistant-tokens-tracking.service.mjs +0 -50
  817. package/esm2022/chat/services/assistant-ws-frames.service.mjs +0 -391
  818. package/esm2022/chat/services/dialog.service.mjs +0 -40
  819. package/esm2022/chat/services/notification.service.mjs +0 -25
  820. package/esm2022/chat/services/principal.service.mjs +0 -16
  821. package/esm2022/chat/services/search.service.mjs +0 -13
  822. package/esm2022/chat/services/signalR-connection.service.mjs +0 -102
  823. package/esm2022/chat/services/signalR.web.service.mjs +0 -69
  824. package/esm2022/chat/services/ui.service.mjs +0 -61
  825. package/esm2022/chat/services/user-settings.service.mjs +0 -25
  826. package/esm2022/chat/sinequa-assistant-chat.mjs +0 -5
  827. package/esm2022/chat/smart-renderer/smart-renderer.mjs +0 -104
  828. package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +0 -52
  829. package/esm2022/chat/tooltip/tooltip.component.mjs +0 -44
  830. package/esm2022/chat/tooltip/tooltip.directive.mjs +0 -203
  831. package/esm2022/chat/types/message-content.types.mjs +0 -2
  832. package/esm2022/chat/types/message-reference.types.mjs +0 -2
  833. package/esm2022/chat/types.mjs +0 -130
  834. package/esm2022/chat/utils/assistant-json.mjs +0 -12
  835. package/esm2022/chat/utils/utils.service.mjs +0 -170
  836. package/esm2022/chat/version.mjs +0 -3
  837. package/esm2022/public-api.mjs +0 -3
  838. package/esm2022/sinequa-assistant.mjs +0 -5
  839. package/public-api.d.ts +0 -1
@@ -1,636 +0,0 @@
1
- import { Injectable, inject } from "@angular/core";
2
- import { TranslocoService } from "@jsverse/transloco";
3
- import { BehaviorSubject, catchError, defer, filter, forkJoin, from, map, switchMap, take, tap, throwError } from "rxjs";
4
- import { Audit, guid, globalConfig } from "@sinequa/atomic";
5
- import { AppService } from "./services/app.service";
6
- import { NotificationsService } from "./services/notification.service";
7
- import { PrincipalService } from "./services/principal.service";
8
- import { UserSettingsWebService } from "./services/user-settings.service";
9
- import { AssistantUtils } from "./utils/utils.service";
10
- import { SavedChatsService } from "./saved-chats/saved-chats.service";
11
- import { SignalRConnectionService } from "./services/signalR-connection.service";
12
- import { AssistantConfigurationService } from "./services/assistant-configuration.service";
13
- import { AssistantMetadataService } from "./services/assistant-metadata.service";
14
- import { AssistantTokensTrackingService } from "./services/assistant-tokens-tracking.service";
15
- import { AssistantWsFramesService } from "./services/assistant-ws-frames.service";
16
- import { DebugMessageService } from "./debug-message/debug-message.service";
17
- import { LIB_VERSION } from "./version";
18
- import * as i0 from "@angular/core";
19
- export class ChatService {
20
- constructor() {
21
- /** Emit true once the initialization of the assistant process is done. */
22
- this.initProcess$ = new BehaviorSubject(false);
23
- /** Emit true once the initialization of the assistant config is done. */
24
- this.initConfig$ = new BehaviorSubject(false);
25
- /** Emit the global configuration of the assistant. */
26
- this.assistantConfig$ = new BehaviorSubject(undefined);
27
- /** Emit true if the user has been overridden, false otherwise. */
28
- this.userOverride$ = new BehaviorSubject(undefined);
29
- /**
30
- * Emit true if the fetch of an assistant's response is ongoing (it includes Streaming status of the assistant endpoint AND saving the discussion if save Chat is enabled).
31
- * This is used to prevent multiple fetches at the same time.
32
- * Typically, there is no problem chaining fetches, but when forcing a reload after query changes cases, it can't be allowed because it breaks the whole business logic.
33
- */
34
- this.streaming$ = new BehaviorSubject(false);
35
- /** List of saved chats. */
36
- this.savedChats$ = new BehaviorSubject([]);
37
- /** Whether there is an error with saved chats. */
38
- this.savedChatsError$ = new BehaviorSubject(false);
39
- /** Emit the saved chat to load. */
40
- this.loadSavedChat$ = new BehaviorSubject(undefined);
41
- /** Emit the quota each time the chat is invoked. */
42
- this.quota$ = new BehaviorSubject(undefined);
43
- /** Emit the calculated user's token consumption based on the quota. */
44
- this.userTokenConsumption$ = new BehaviorSubject(undefined);
45
- /** Emit the chat usage metrics each time the generation of the assistant response is completed. */
46
- this.chatUsageMetrics$ = new BehaviorSubject(undefined);
47
- /** Emit the calculated chat's token consumption based on the chat usage metrics. */
48
- this.chatTokenConsumption$ = new BehaviorSubject(undefined);
49
- /** Emit true if "CancelTasks" is ongoing. */
50
- this.stoppingGeneration$ = new BehaviorSubject(false);
51
- this.userSettingsService = inject(UserSettingsWebService);
52
- this.notificationsService = inject(NotificationsService);
53
- this.appService = inject(AppService);
54
- this.principalService = inject(PrincipalService);
55
- this.assistantUtils = inject(AssistantUtils);
56
- this.savedChatsService = inject(SavedChatsService);
57
- // Inject the SignalRConnectionService using 'new' to ensure a separate local instance for each ChatService instance
58
- this.signalRConnectionService = new SignalRConnectionService();
59
- this.assistantConfigurationService = inject(AssistantConfigurationService);
60
- this.assistantMetadataService = new AssistantMetadataService();
61
- this.assistantTokensTrackingService = inject(AssistantTokensTrackingService);
62
- this.debugMessageService = inject(DebugMessageService);
63
- // Inject the AssistantWsFramesService using 'new' to ensure a separate local instance for each ChatService instance
64
- this.assistantWsFramesService = new (AssistantWsFramesService);
65
- this.transloco = inject(TranslocoService);
66
- }
67
- /**
68
- * Initialize the assistant process.
69
- * It includes building and starting a connection, executing parallel requests for models and functions, and handling errors during the process.
70
- * ⚠️ This method MUST be called ONLY if the user is loggedIn and once when the assistant is initialized.
71
- *
72
- * @returns An Observable<boolean> indicating the success of the initialization process.
73
- */
74
- init() {
75
- // Ensure all logic is executed when subscribed to the observable
76
- return defer(() => {
77
- this._initAssistantConfigurationService();
78
- return from(this.initChatConfig());
79
- }).pipe(
80
- // Wait for the configuration to be initialized
81
- switchMap(() => this.initConfig$.pipe(filter(Boolean), take(1))), switchMap(() => {
82
- this.getWSRequestsUrl();
83
- this.getRESTRequestsUrl();
84
- this._initAssistantMetadataService();
85
- this._initAssistantTokensTrackingService();
86
- this._initSavedChatsService();
87
- this._initDebugMessageService();
88
- this._initSignalRConnectionService();
89
- return this.checkVersionAlignment();
90
- }),
91
- // Build and start the SignalR connection
92
- switchMap(() => this.buildConnection()), tap(() => {
93
- // Initialize AssistantWsFramesService here, now that 'this.connection' is set
94
- this._initAssistantWsFramesService();
95
- this.initMessageHandlers();
96
- }),
97
- // Start the connection
98
- switchMap(() => this.startConnection()),
99
- // Fetch metadata in parallel
100
- switchMap(() => forkJoin([
101
- this.listModels(),
102
- this.listFunctions()
103
- ])),
104
- // Map the results of parallel requests to a boolean indicating success
105
- map(([models, functions]) => {
106
- const result = (models !== undefined && functions !== undefined && !!models && !!functions);
107
- this.initProcess$.next(result);
108
- return result;
109
- }),
110
- // Any errors during the process are caught, logged, and re-thrown to propagate the error further
111
- catchError((error) => {
112
- console.error('Error occurred:', error);
113
- return throwError(() => error);
114
- }), take(1));
115
- }
116
- /**
117
- * Define the endpoint to use for the websocket requests
118
- * It can be overridden by the app config
119
- */
120
- getWSRequestsUrl() {
121
- this.assistantConfigurationService.getWSRequestsUrl();
122
- }
123
- /**
124
- * Define the endpoint to use for the http requests
125
- * It can be overridden by the app config
126
- */
127
- getRESTRequestsUrl() {
128
- this.assistantConfigurationService.getRESTRequestsUrl();
129
- }
130
- /**
131
- * Retrieves the plugin version information.
132
- * @returns An Observable of PluginVersion or undefined.
133
- */
134
- getPluginVersion() {
135
- return this.assistantMetadataService.getPluginVersion();
136
- }
137
- /**
138
- * Retrieves the Sinequa Enterprise Search version.
139
- * @returns The Sinequa Enterprise Search version as a string, or undefined if not available.
140
- */
141
- getSinequaESVersion() {
142
- return this.assistantMetadataService.getSinequaESVersion();
143
- }
144
- /**
145
- * Checks and logs the version alignment between the Angular library, plugin, and Sinequa ES.
146
- * It fetches the plugin and Sinequa ES versions in parallel and logs the information to the console.
147
- */
148
- checkVersionAlignment() {
149
- return forkJoin([
150
- this.getSinequaESVersion(),
151
- this.getPluginVersion()
152
- ]).pipe(tap(([esVersion, pluginVersion]) => {
153
- const infoMessage = `[INFO] - Assistant instance [${this.chatInstanceId}]: Angular Library [${LIB_VERSION}] Plugin [${pluginVersion?.pluginVersion}] Build [${esVersion}]`;
154
- console.log("%cℹ️ " + infoMessage, "background: #E0F8F8; color: #222; border: 1px solid #222; padding: 2px 6px; border-radius: 4px; font-weight: 500;");
155
- if (pluginVersion?.pluginVersion !== LIB_VERSION) {
156
- const warningMessage = `[WARN] - Assistant instance [${this.chatInstanceId}]: Version mismatch between the Angular library [${LIB_VERSION}] and Plugin [${pluginVersion?.pluginVersion}].\n💡 [HELP] Please ensure both are on the same version to avoid potential issues.`;
157
- console.log("%c⚠️ " + warningMessage, "background: #FFF4E5; color: #222; border: 1px solid #222; padding: 2px 6px; border-radius: 4px; font-weight: 500;");
158
- }
159
- }));
160
- }
161
- /**
162
- * Initializes the SavedChatsService with the necessary configuration.
163
- *
164
- * This method sets up the `SavedChatsService` by providing it with a configuration object
165
- * (`SavedChatsOperationConfig`) that includes various callbacks and properties required
166
- * for its operation. The initialization will only proceed if both `assistantConfig$` and
167
- * `REST_REQUEST_URL` are available.
168
- *
169
- * The configuration object includes:
170
- * - Application name retrieval.
171
- * - Instance ID retrieval.
172
- * - REST API URL retrieval.
173
- * - Debug flag retrieval.
174
- * - Chat ID for new saves.
175
- * - Saved chats enablement check.
176
- * - Methods for setting a saved chat ID, updating the saved chats list, and generating audit events.
177
- *
178
- * If the required dependencies are not ready, an error is logged to the console.
179
- *
180
- * @private
181
- */
182
- _initSavedChatsService() {
183
- if (this.assistantConfig$.value && this.REST_REQUEST_URL) {
184
- const savedChatsOpConfig = {
185
- getAppName: () => this.appService.appName,
186
- getInstanceId: () => this.chatInstanceId,
187
- getRestUrl: () => this.REST_REQUEST_URL,
188
- getDebugFlag: () => this.assistantConfig$.value.defaultValues.debug,
189
- isSavedChatsEnabled: () => !!this.assistantConfig$.value?.savedChatSettings.enabled,
190
- setSavedChatsErrorStatus: (hasError) => this.savedChatsError$.next(hasError),
191
- updateSavedChatsList: (chats) => this.savedChats$.next(chats),
192
- generateAuditEvent: (type, details, id) => this.generateAuditEvent(type, details, id),
193
- };
194
- this.savedChatsService.init(savedChatsOpConfig);
195
- }
196
- else {
197
- // This case should ideally not happen if init order is correct
198
- console.error("Cannot initialize SavedChatsService: assistantConfig or REST_REQUEST_URL not ready.");
199
- }
200
- }
201
- /**
202
- * Initializes the SignalR connection service with the necessary configuration.
203
- *
204
- * This method ensures that the SignalR connection service is properly set up
205
- * by providing it with the required configuration values, such as the WebSocket
206
- * request URL and assistant configuration. It also manages the SignalR hub connection
207
- * instance.
208
- *
209
- * Preconditions:
210
- * - `assistantConfig$.value` must be available.
211
- * - `WS_REQUEST_URL` must be defined.
212
- *
213
- * If these preconditions are not met, an error is logged to the console.
214
- *
215
- * @private
216
- */
217
- _initSignalRConnectionService() {
218
- if (this.assistantConfig$.value && this.WS_REQUEST_URL) {
219
- const signalROpConfig = {
220
- getWsRequestUrl: () => this.WS_REQUEST_URL,
221
- getAssistantConfigValue: () => this.assistantConfig$.value,
222
- getHubConnection: () => this.connection, // Using getHubConnection as per user's file
223
- setHubConnection: (conn) => { this.connection = conn; }
224
- };
225
- this.signalRConnectionService.init(signalROpConfig);
226
- }
227
- else {
228
- // This case should ideally not happen if init order is correct
229
- console.error("Cannot initialize SignalRConnectionService: assistantConfig or WS_REQUEST_URL not ready.");
230
- }
231
- }
232
- /**
233
- * Initializes the Assistant Configuration Service with the necessary operation context.
234
- * This method sets up the configuration context by providing various utility functions
235
- * and state management mechanisms required for the assistant's configuration operations.
236
- *
237
- * The operation context includes:
238
- * - Methods to retrieve chat instance and chat IDs.
239
- * - Methods to get and set assistant configuration values.
240
- * - Methods to set WebSocket and REST request URLs.
241
- * - Methods to update the initialization configuration status.
242
- * - A method to generate audit events for tracking operations.
243
- *
244
- * @private
245
- */
246
- _initAssistantConfigurationService() {
247
- const configOpContext = {
248
- getChatInstanceId: () => this.chatInstanceId,
249
- getChatId: () => this.chatId,
250
- getAssistantConfigValue: () => this.assistantConfig$.value,
251
- setWSRequestsUrl: (url) => this.WS_REQUEST_URL = url,
252
- setRESTRequestsUrl: (url) => this.REST_REQUEST_URL = url,
253
- setAssistantConfig: (config) => this.assistantConfig$.next(config),
254
- setInitConfigStatus: (status) => this.initConfig$.next(status),
255
- generateAuditEvent: (type, details, id) => this.generateAuditEvent(type, details, id)
256
- };
257
- this.assistantConfigurationService.init(configOpContext);
258
- }
259
- /**
260
- * Initializes the AssistantMetadataService with the necessary operation context.
261
- *
262
- * This method checks if the `assistantConfig$` value and `REST_REQUEST_URL` are available.
263
- * If both are ready, it creates an `AssistantMetadataOperationContext` object and
264
- * initializes the `assistantMetadataService` with it. The operation context provides
265
- * methods to retrieve the REST URL, assistant configuration, and to set models and functions.
266
- *
267
- * If the required values are not ready, an error is logged to the console.
268
- *
269
- * @private
270
- */
271
- _initAssistantMetadataService() {
272
- if (this.assistantConfig$.value && this.REST_REQUEST_URL) {
273
- const metadataOpContext = {
274
- getRestUrl: () => this.REST_REQUEST_URL,
275
- getAssistantConfigValue: () => this.assistantConfig$.value,
276
- setModels: (models) => { this.models = models; },
277
- setFunctions: (functions) => { this.functions = functions; }
278
- };
279
- this.assistantMetadataService.init(metadataOpContext);
280
- }
281
- else {
282
- console.error("Cannot initialize AssistantMetadataService: assistantConfig or REST_REQUEST_URL not ready.");
283
- }
284
- }
285
- /**
286
- * Initializes the Assistant Tokens Tracking Service with the necessary operation context.
287
- * This method sets up the service by providing it with functions to manage quotas,
288
- * token consumption, usage metrics, and audit events, as well as access to assistant configuration
289
- * and model retrieval.
290
- *
291
- * The initialization will only proceed if the assistant configuration is available.
292
- * If the configuration is not ready, an error message is logged to the console.
293
- *
294
- * @private
295
- */
296
- _initAssistantTokensTrackingService() {
297
- if (this.assistantConfig$.value) {
298
- const tokensOpContext = {
299
- getAssistantConfigValue: () => this.assistantConfig$.value,
300
- setQuota: (quota) => this.quota$.next(quota),
301
- setUserTokenConsumption: (consumption) => this.userTokenConsumption$.next(consumption),
302
- setChatUsageMetrics: (metrics) => this.chatUsageMetrics$.next(metrics),
303
- setChatTokenConsumption: (consumption) => this.chatTokenConsumption$.next(consumption),
304
- generateAuditEvent: (type, details, id) => this.generateAuditEvent(type, details, id),
305
- getModel: (serviceId, modelId) => this.getModel(serviceId, modelId)
306
- };
307
- this.assistantTokensTrackingService.init(tokensOpContext);
308
- }
309
- else {
310
- console.error("Cannot initialize AssistantTokensTrackingService: assistantConfig not ready.");
311
- }
312
- }
313
- /**
314
- * Initializes the Assistant WebSocket Frames Service with the necessary operation context.
315
- * This method sets up the required dependencies and configuration for the service to function properly.
316
- * It ensures that the assistant configuration and connection are available before initializing the service.
317
- *
318
- * The operation context provides various utility functions and state management methods, including:
319
- * - Accessing the assistant configuration, chat instance ID, saved chat ID, and chat history.
320
- * - Managing streaming and stopping generation statuses.
321
- * - Updating quota and chat usage metrics.
322
- * - Generating audit events.
323
- * - Managing saved chats (adding, updating, and listing).
324
- *
325
- * If the required dependencies (`assistantConfig$` and `connection`) are not ready, an error is logged.
326
- *
327
- * @private
328
- */
329
- _initAssistantWsFramesService() {
330
- if (this.assistantConfig$.value && this.connection) {
331
- const wsFramesOpContext = {
332
- getAssistantConfig: () => this.assistantConfig$.value,
333
- getChatInstanceId: () => this.chatInstanceId,
334
- getChatId: () => this.chatId,
335
- getHubConnection: () => this.connection,
336
- getChatHistory: () => this.chatHistory,
337
- setStreamingStatus: (isStreaming) => this.streaming$.next(isStreaming),
338
- setChatHistory: (history) => { this.chatHistory = history; },
339
- setStoppingGenerationStatus: (isStopping) => this.stoppingGeneration$.next(isStopping),
340
- setSavedChatsErrorStatus: (hasError) => this.savedChatsError$.next(hasError),
341
- updateQuota: (quota, propagateError) => this.updateQuota(quota, propagateError),
342
- updateChatUsageMetrics: (metrics) => this.updateChatUsageMetrics(metrics),
343
- generateAuditEvent: (type, details, id) => this.generateAuditEvent(type, details, id),
344
- addSavedChat: (id, messages) => this.addSavedChat(id, messages),
345
- updateSavedChat: (id, name, messages) => this.updateSavedChat(id, name, messages),
346
- listSavedChat: () => this.listSavedChat(),
347
- isExistingSavedChat: (id) => this.isExistingSavedChat(id)
348
- };
349
- this.assistantWsFramesService.init(wsFramesOpContext);
350
- }
351
- else {
352
- console.error("Cannot initialize AssistantWsFramesService: core dependencies not ready.");
353
- }
354
- }
355
- _initDebugMessageService() {
356
- if (this.assistantConfig$.value && this.REST_REQUEST_URL) {
357
- const debugMessageOpContext = {
358
- getRestUrl: () => this.REST_REQUEST_URL
359
- };
360
- this.debugMessageService.init(debugMessageOpContext);
361
- }
362
- else {
363
- console.error("Cannot initialize DebugMessageService: assistantConfig or REST_REQUEST_URL not ready.");
364
- }
365
- }
366
- get assistants() {
367
- return this.assistantConfigurationService.getAssistantsSetting();
368
- }
369
- /**
370
- * Get the instance ID of the chat service
371
- * @returns The instance ID of the chat service
372
- */
373
- get chatInstanceId() {
374
- return this._chatInstanceId;
375
- }
376
- /**
377
- * Persist the instance ID of the chat service
378
- * @param instanceId The instance ID of the chat service
379
- */
380
- setChatInstanceId(instanceId) {
381
- this._chatInstanceId = instanceId;
382
- }
383
- /**
384
- * Get the ID of the current chat discussion which is used to save/get/delete the discussion and identify audit events
385
- * @returns The ID of the current chat discussion
386
- */
387
- get chatId() {
388
- return this._chatId;
389
- }
390
- /**
391
- * Generate an GUID for the current chat discussion which is used to save/get/delete it and identify audit events
392
- * @param chatId if provided, it will be considered as the ID of the current chat discussion which is used to identify audit events
393
- */
394
- generateChatId(chatId) {
395
- this._chatId = chatId || guid();
396
- }
397
- /**
398
- * Initialize the chat config by managing ONLY sub-object **defaultValues** configs of the standard app config (defined in the customization json tab ) and the user preferences.
399
- * To do so, a tracking mechanism is implemented to notify the user about the available updates in the defaultValues object of the standard app config.
400
- * The rest of the config object coming from "standard app config" is used as it is without any override.
401
- * Thus, the user preferences are used only for the defaultValues object.
402
- * This provide a centralized way to manage the rest of the config object by admins and ensure a unique common behavior for all users.
403
- */
404
- async initChatConfig() {
405
- this.assistantConfigurationService.initChatConfig();
406
- }
407
- /**
408
- * Update the chat config and store its defaultValues in the user preferences
409
- * @param config The updated chat config
410
- * @param hashes The updated hashes to store in the user preferences
411
- * @param notify Whether to notify the user about the update
412
- * @param successCallback The callback to execute if the update is successful
413
- * @param errorCallback The callback to execute if the update fails
414
- */
415
- updateChatConfig(config, hashes, notify = true, successCallback, errorCallback) {
416
- this.assistantConfigurationService.updateChatConfig(config, hashes, notify, successCallback, errorCallback);
417
- }
418
- /**
419
- * Overrides the logged in user
420
- */
421
- overrideUser() {
422
- const { userOverrideActive, userOverride } = globalConfig;
423
- if (!(userOverrideActive && userOverride)) {
424
- this.userOverride$.next(false);
425
- return;
426
- }
427
- // Prepare the payload to send to the OverrideUser method
428
- const data = {
429
- instanceId: this.chatInstanceId,
430
- user: userOverride.username,
431
- domain: userOverride.domain
432
- };
433
- // Invoke the OverrideUser method and handle errors
434
- this.connection.invoke('OverrideUser', data)
435
- .then((res) => this.userOverride$.next(!!res))
436
- .catch(error => {
437
- console.error('Error invoking OverrideUser:', error);
438
- return Promise.resolve(); // Return a resolved promise to handle the error and prevent unhandled promise rejection when no further error handling exists downstream
439
- });
440
- }
441
- /**
442
- * Calls the Fetch API to retrieve a new message given all previous messages
443
- */
444
- fetch(messages, query) {
445
- return this.assistantWsFramesService.fetch(messages, query);
446
- }
447
- /**
448
- * Return the list of models available on the server
449
- */
450
- listModels() {
451
- return this.assistantMetadataService.listModels();
452
- }
453
- /**
454
- * Return the list of functions available on the server AND matching enabled functions in the chat config
455
- */
456
- listFunctions() {
457
- return this.assistantMetadataService.listFunctions();
458
- }
459
- /**
460
- * Stops the assistant answer generation and cancels all the ongoing and pending related tasks
461
- */
462
- stopGeneration() {
463
- return this.assistantWsFramesService.stopGeneration();
464
- }
465
- /**
466
- * A handler for quota updates each time the chat is invoked.
467
- * It emits the updated quota to the quota$ subject, emits accordingly the updated user's tokens consumption and notifies the user if the max quota is reached.
468
- * @param quota The updated quota
469
- * @param propagateError Whether to propagate the error to the caller
470
- */
471
- updateQuota(quota, propagateError = false) {
472
- this.assistantTokensTrackingService.updateQuota(quota, propagateError);
473
- }
474
- /**
475
- * A handler for chat usage metrics each time the generation of the assistant response is completed.
476
- * It emits the chat usage metrics to the chatUsageMetrics$ subject, emits accordingly the updated chat's tokens consumption
477
- * @param chatUsageMetrics The chat usage metrics
478
- */
479
- updateChatUsageMetrics(chatUsageMetrics) {
480
- this.assistantTokensTrackingService.updateChatUsageMetrics(chatUsageMetrics);
481
- }
482
- /**
483
- * Get the model description for the given (serviceId + modelId)
484
- * If a model is not found, an error message is returned
485
- * @param serviceId The serviceId of the model
486
- * @param modelId The modelId of the model
487
- * @returns The model description
488
- */
489
- getModel(serviceId, modelId) {
490
- const model = this.models?.find(m => m.serviceId === serviceId && m.modelId === modelId);
491
- // Handle obsolete config
492
- if (!model) {
493
- this.notificationsService.error(`FATAL ERROR : The model (serviceId = '${serviceId}', modelId = '${modelId}') is no longer available. Please contact an admin for further information.`);
494
- throw new Error(`FATAL ERROR : The model (serviceId = '${serviceId}', modelId = '${modelId}') is no longer available`);
495
- }
496
- return model;
497
- }
498
- /**
499
- * Fetch the list saved chats belonging to a specific instance of the assistant
500
- */
501
- listSavedChat() {
502
- this.savedChatsService.listChats();
503
- }
504
- /**
505
- * Return the saved chat with the given id, if exists. Otherwise, return undefined
506
- * @param id The id of the saved chat
507
- */
508
- getSavedChat(id) {
509
- return this.savedChatsService.getChatById(id);
510
- }
511
- /**
512
- * Check if a saved chat with the given id already exists
513
- * @param id The id of the saved chat
514
- * @returns True if the saved chat exists, false otherwise
515
- */
516
- isExistingSavedChat(id) {
517
- return this.savedChatsService.isExistingChat(id);
518
- }
519
- /**
520
- * Save a chat with the given messages
521
- * @param messages The messages to add to the saved chat index
522
- * @returns The saved chat
523
- */
524
- addSavedChat(id, messages) {
525
- return this.savedChatsService.addChat(id, messages);
526
- }
527
- /**
528
- * Update a saved chat with the given id.
529
- * @param id The id of the saved chat
530
- * @param name The new name of the saved chat, if provided
531
- * @param messages The messages to update the saved chat history, if provided
532
- * @returns True if the saved chat has been successfully updated
533
- */
534
- updateSavedChat(id, name, messages) {
535
- return this.savedChatsService.updateChat(id, name, messages);
536
- }
537
- /**
538
- * Bulk delete of saved chats matching the given ids
539
- * @param ids List of ids of the saved chats to delete
540
- * @returns The number of deleted chats
541
- */
542
- deleteSavedChat(ids) {
543
- return this.savedChatsService.deleteChat(ids);
544
- }
545
- getDebugMessage(message) {
546
- return this.debugMessageService.getDebugMessage(message);
547
- }
548
- /**
549
- * Initialize out-of-the-box handlers
550
- * It is a placeholder for non-streaming scenarios, where you invoke a specific hub method, and the server responds with frame message(s)
551
- */
552
- initMessageHandlers() {
553
- this.assistantWsFramesService.initMessageHandlers();
554
- }
555
- /**
556
- * Override and register the entire _messageHandlers map by merging the provided map with the default one
557
- * @param _messageHandlers
558
- */
559
- overrideMessageHandlers(_messageHandlers) {
560
- this.assistantWsFramesService.overrideMessageHandlers(_messageHandlers);
561
- }
562
- /**
563
- * Add a listener for a specific event.
564
- * If a listener for this same event already exists, it will be overridden.
565
- * If the listener has "isGlobalHandler" set to true, it will be registered to the hub connection.
566
- * @param eventName Name of the event to register a listener for
567
- * @param eventHandler The handler to be called when the event is received
568
- */
569
- addMessageHandler(eventName, eventHandler) {
570
- this.assistantWsFramesService.addMessageHandler(eventName, eventHandler);
571
- }
572
- /**
573
- * Remove a listener for a specific event from the _messageHandlers map and unsubscribe from receiving messages for this event from the SignalR hub.
574
- * @param eventName Name of the event to remove the listener for
575
- */
576
- removeMessageHandler(eventName) {
577
- this.assistantWsFramesService.removeMessageHandler(eventName);
578
- }
579
- /**
580
- * Build a connection to the signalR websocket and register default listeners to the methods defined in the server hub class
581
- * @param options The options for the connection. It overrides the default options
582
- * @param logLevel Define the log level displayed in the console
583
- * @returns Promise that resolves when the connection is built
584
- */
585
- buildConnection(options) {
586
- return this.signalRConnectionService.buildConnection(options);
587
- }
588
- /**
589
- * Start the connection
590
- * @returns Promise that resolves when the connection is started
591
- */
592
- startConnection() {
593
- return this.signalRConnectionService.startConnection();
594
- }
595
- /**
596
- * Stop the connection
597
- * @returns Promise that resolves when the connection is stopped
598
- */
599
- stopConnection() {
600
- return this.signalRConnectionService.stopConnection();
601
- }
602
- /**
603
- * Generate an audit event with the given type and details. The generated audit event is sent afterwards via the AuditWebService
604
- * @param type Audit event type
605
- * @param details Audit event details
606
- * @param id Actions (savedChat delete/rename/...) may occur on a specific chat different than the current one stored in this service, so the chat id can be provided
607
- */
608
- async generateAuditEvent(type, details, id) {
609
- const baseDetails = {
610
- "url": decodeURIComponent(window.location.href),
611
- "app": this.appService.appName,
612
- "user-id": this.principalService.principal?.userId,
613
- "instance-id": this.chatInstanceId,
614
- "chat-id": id || this.chatId,
615
- "service-id": this.assistantConfig$.value.defaultValues.service_id,
616
- "model-id": this.assistantConfig$.value.defaultValues.model_id
617
- };
618
- if (type === "ast-message.message") {
619
- baseDetails["is-user-input"] = false;
620
- }
621
- const audit = {
622
- type,
623
- detail: {
624
- ...baseDetails,
625
- ...details
626
- }
627
- };
628
- await Audit.notify(audit);
629
- }
630
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
631
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatService }); }
632
- }
633
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatService, decorators: [{
634
- type: Injectable
635
- }] });
636
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvY2hhdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLElBQUksRUFDSixHQUFHLEVBRUgsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEVBQ0gsVUFBVSxFQUNYLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNMLEtBQUssRUFFTCxJQUFJLEVBQ0osWUFBWSxFQUNiLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBc0IxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBb0MsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuSCxPQUFPLEVBQUUsNkJBQTZCLEVBQTBDLE1BQU0sNENBQTRDLENBQUM7QUFDbkksT0FBTyxFQUFFLHdCQUF3QixFQUFxQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BILE9BQU8sRUFBRSw4QkFBOEIsRUFBMkMsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2SSxP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QkFBcUIsRUFBRSxDQUFDO1lBQ25DLFdBQVcsQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdkMsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHO1lBQ1osSUFBSTtZQUNKLE1BQU0sRUFBRTtnQkFDTixHQUFHLFdBQVc7Z0JBQ2QsR0FBRyxPQUFPO2FBQ1g7U0FDRixDQUFBO1FBQ0QsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7K0dBOXFCVSxXQUFXO21IQUFYLFdBQVc7OzRGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gXCJAanN2ZXJzZS90cmFuc2xvY29cIjtcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgZGVmZXIsXG4gIGZpbHRlcixcbiAgZm9ya0pvaW4sXG4gIGZyb20sXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG4gIHRocm93RXJyb3Jcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEh1YkNvbm5lY3Rpb24gfSBmcm9tIFwiQG1pY3Jvc29mdC9zaWduYWxyXCI7XG5pbXBvcnQge1xuICBBdWRpdCxcbiAgUXVlcnksXG4gIGd1aWQsXG4gIGdsb2JhbENvbmZpZ1xufSBmcm9tIFwiQHNpbmVxdWEvYXRvbWljXCI7XG5cbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hcHAuc2VydmljZVwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgUHJpbmNpcGFsU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3ByaW5jaXBhbC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBVc2VyU2V0dGluZ3NXZWJTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvdXNlci1zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBDaGF0Q29uZmlnLFxuICBDaGF0TWVzc2FnZSxcbiAgQ2hhdFJlc3BvbnNlLFxuICBDaGF0VXNhZ2VNZXRyaWNzLFxuICBEZWJ1Z01lc3NhZ2UsXG4gIERlbGV0ZVNhdmVkQ2hhdFJlc3BvbnNlLFxuICBHbGxtRnVuY3Rpb24sXG4gIEdsbG1Nb2RlbERlc2NyaXB0aW9uLFxuICBLdk9iamVjdCxcbiAgTGlzdE9iamVjdCxcbiAgTWVzc2FnZUhhbmRsZXIsXG4gIFBsdWdpblZlcnNpb24sXG4gIFF1b3RhLFxuICBTYXZlZENoYXQsXG4gIFNhdmVkQ2hhdEhpc3RvcnksXG4gIFNhdmVkQ2hhdFJlc3BvbnNlLFxuICBUb2tlbkNvbnN1bXB0aW9uLFxuICBVc2VyVG9rZW5Db25zdW1wdGlvblxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi9zZXJ2aWNlcy9zaWduYWxSLndlYi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRVdGlscyB9IGZyb20gXCIuL3V0aWxzL3V0aWxzLnNlcnZpY2VcIjtcbmltcG9ydCB7IFNhdmVkQ2hhdHNTZXJ2aWNlLCBTYXZlZENoYXRzT3BlcmF0aW9uQ29uZmlnIH0gZnJvbSBcIi4vc2F2ZWQtY2hhdHMvc2F2ZWQtY2hhdHMuc2VydmljZVwiO1xuaW1wb3J0IHsgU2lnbmFsUkNvbm5lY3Rpb25TZXJ2aWNlLCBTaWduYWxSQ29ubmVjdGlvbk9wZXJhdGlvbkNvbmZpZyB9IGZyb20gXCIuL3NlcnZpY2VzL3NpZ25hbFItY29ubmVjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZSwgQXNzaXN0YW50Q29uZmlndXJhdGlvbk9wZXJhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3Npc3RhbnQtY29uZmlndXJhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UsIEFzc2lzdGFudE1ldGFkYXRhT3BlcmF0aW9uQ29udGV4dCB9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2lzdGFudC1tZXRhZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2UsIEFzc2lzdGFudFRva2Vuc1RyYWNraW5nT3BlcmF0aW9uQ29udGV4dCB9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2lzdGFudC10b2tlbnMtdHJhY2tpbmcuc2VydmljZVwiO1xuaW1wb3J0IHsgQXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLCBBc3Npc3RhbnRXc0ZyYW1lc0NvbnRleHQgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3Npc3RhbnQtd3MtZnJhbWVzLnNlcnZpY2VcIjtcbmltcG9ydCB7IERlYnVnTWVzc2FnZU9wZXJhdGlvbkNvbmZpZywgRGVidWdNZXNzYWdlU2VydmljZSB9IGZyb20gXCIuL2RlYnVnLW1lc3NhZ2UvZGVidWctbWVzc2FnZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBMSUJfVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb25cIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENoYXRTZXJ2aWNlIHtcblxuICAvKiogTmFtZSBvZiB0aGUgYXNzaXN0YW50IHdlYnNvY2tldCBlbmRwb2ludC4gKi9cbiAgV1NfUkVRVUVTVF9VUkw6IHN0cmluZztcbiAgLyoqIE5hbWUgb2YgdGhlIGFzc2lzdGFudCBSRVNUIGVuZHBvaW50LiAqL1xuICBSRVNUX1JFUVVFU1RfVVJMOiBzdHJpbmc7XG4gIC8qKiBTaWduYWxSIGNvbm5lY3Rpb24gaW5zdGFuY2UgKi9cbiAgcHVibGljIGNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb24gfCB1bmRlZmluZWQ7XG4gIC8qKiBFbWl0IHRydWUgb25jZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGFzc2lzdGFudCBwcm9jZXNzIGlzIGRvbmUuICovXG4gIGluaXRQcm9jZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogRW1pdCB0cnVlIG9uY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBhc3Npc3RhbnQgY29uZmlnIGlzIGRvbmUuICovXG4gIGluaXRDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBFbWl0IHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgYXNzaXN0YW50LiAqL1xuICBhc3Npc3RhbnRDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGF0Q29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0cnVlIGlmIHRoZSB1c2VyIGhhcyBiZWVuIG92ZXJyaWRkZW4sIGZhbHNlIG90aGVyd2lzZS4gKi9cbiAgdXNlck92ZXJyaWRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIEVtaXQgdHJ1ZSBpZiB0aGUgZmV0Y2ggb2YgYW4gYXNzaXN0YW50J3MgcmVzcG9uc2UgaXMgb25nb2luZyAoaXQgaW5jbHVkZXMgU3RyZWFtaW5nIHN0YXR1cyBvZiB0aGUgYXNzaXN0YW50IGVuZHBvaW50IEFORCBzYXZpbmcgdGhlIGRpc2N1c3Npb24gaWYgc2F2ZSBDaGF0IGlzIGVuYWJsZWQpLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gcHJldmVudCBtdWx0aXBsZSBmZXRjaGVzIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqIFR5cGljYWxseSwgdGhlcmUgaXMgbm8gcHJvYmxlbSBjaGFpbmluZyBmZXRjaGVzLCBidXQgd2hlbiBmb3JjaW5nIGEgcmVsb2FkIGFmdGVyIHF1ZXJ5IGNoYW5nZXMgY2FzZXMsIGl0IGNhbid0IGJlIGFsbG93ZWQgYmVjYXVzZSBpdCBicmVha3MgdGhlIHdob2xlIGJ1c2luZXNzIGxvZ2ljLlxuICAqL1xuICBzdHJlYW1pbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBTdG9yZSB0aGUgbWVzc2FnZXMgaGlzdG9yeSBvZiB0aGUgY3VycmVudCBjaGF0LiAqL1xuICBjaGF0SGlzdG9yeTogQ2hhdE1lc3NhZ2VbXSB8IHVuZGVmaW5lZDtcbiAgLyoqIExpc3Qgb2YgbW9kZWxzIGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyLiAqL1xuICBtb2RlbHM6IEdsbG1Nb2RlbERlc2NyaXB0aW9uW10gfCB1bmRlZmluZWQ7XG4gIC8qKiBMaXN0IG9mIGZ1bmN0aW9ucyBhdmFpbGFibGUgb24gdGhlIHNlcnZlci4gKi9cbiAgZnVuY3Rpb25zOiBHbGxtRnVuY3Rpb25bXSB8IHVuZGVmaW5lZDtcbiAgLyoqIExpc3Qgb2Ygc2F2ZWQgY2hhdHMuICovXG4gIHNhdmVkQ2hhdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYXZlZENoYXRbXT4oW10pO1xuICAvKiogV2hldGhlciB0aGVyZSBpcyBhbiBlcnJvciB3aXRoIHNhdmVkIGNoYXRzLiAqL1xuICBzYXZlZENoYXRzRXJyb3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBFbWl0IHRoZSBzYXZlZCBjaGF0IHRvIGxvYWQuICovXG4gIGxvYWRTYXZlZENoYXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYXZlZENoYXQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKiBFbWl0IHRoZSBxdW90YSBlYWNoIHRpbWUgdGhlIGNoYXQgaXMgaW52b2tlZC4gKi9cbiAgcXVvdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdW90YSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIEVtaXQgdGhlIGNhbGN1bGF0ZWQgdXNlcidzIHRva2VuIGNvbnN1bXB0aW9uIGJhc2VkIG9uIHRoZSBxdW90YS4gKi9cbiAgdXNlclRva2VuQ29uc3VtcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVc2VyVG9rZW5Db25zdW1wdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIEVtaXQgdGhlIGNoYXQgdXNhZ2UgbWV0cmljcyBlYWNoIHRpbWUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGFzc2lzdGFudCByZXNwb25zZSBpcyBjb21wbGV0ZWQuICovXG4gIGNoYXRVc2FnZU1ldHJpY3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGF0VXNhZ2VNZXRyaWNzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0aGUgY2FsY3VsYXRlZCBjaGF0J3MgdG9rZW4gY29uc3VtcHRpb24gYmFzZWQgb24gdGhlIGNoYXQgdXNhZ2UgbWV0cmljcy4gKi9cbiAgY2hhdFRva2VuQ29uc3VtcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUb2tlbkNvbnN1bXB0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0cnVlIGlmIFwiQ2FuY2VsVGFza3NcIiBpcyBvbmdvaW5nLiAqL1xuICBzdG9wcGluZ0dlbmVyYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBJbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlIGRlZmluaW5nIHRoZSBhc3Npc3RhbnQgaW5zdGFuY2UuICovXG4gIHByaXZhdGUgX2NoYXRJbnN0YW5jZUlkOiBzdHJpbmc7XG4gIC8qKiBHZW5lcmF0ZWQgR1VJRCBmb3IgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHVzZWQgdG8gc2F2ZS9nZXQvZGVsZXRlIGl0IGFuZCBpZGVudGlmeSBhdWRpdCBldmVudHMuICovXG4gIHByaXZhdGUgX2NoYXRJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyB1c2VyU2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXR0aW5nc1dlYlNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwdWJsaWMgYXBwU2VydmljZSA9IGluamVjdChBcHBTZXJ2aWNlKTtcbiAgcHVibGljIHByaW5jaXBhbFNlcnZpY2UgPSBpbmplY3QoUHJpbmNpcGFsU2VydmljZSk7XG4gIHB1YmxpYyBhc3Npc3RhbnRVdGlscyA9IGluamVjdChBc3Npc3RhbnRVdGlscyk7XG4gIHByaXZhdGUgc2F2ZWRDaGF0c1NlcnZpY2UgPSBpbmplY3QoU2F2ZWRDaGF0c1NlcnZpY2UpO1xuICAvLyBJbmplY3QgdGhlIFNpZ25hbFJDb25uZWN0aW9uU2VydmljZSB1c2luZyAnbmV3JyB0byBlbnN1cmUgYSBzZXBhcmF0ZSBsb2NhbCBpbnN0YW5jZSBmb3IgZWFjaCBDaGF0U2VydmljZSBpbnN0YW5jZVxuICBwcml2YXRlIHNpZ25hbFJDb25uZWN0aW9uU2VydmljZSA9IG5ldyBTaWduYWxSQ29ubmVjdGlvblNlcnZpY2UoKTtcbiAgcHJpdmF0ZSBhc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdChBc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgYXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlID0gbmV3IEFzc2lzdGFudE1ldGFkYXRhU2VydmljZSgpO1xuICBwcml2YXRlIGFzc2lzdGFudFRva2Vuc1RyYWNraW5nU2VydmljZSA9IGluamVjdChBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2UpO1xuICBwcml2YXRlIGRlYnVnTWVzc2FnZVNlcnZpY2UgPSBpbmplY3QoRGVidWdNZXNzYWdlU2VydmljZSk7XG4gIC8vIEluamVjdCB0aGUgQXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlIHVzaW5nICduZXcnIHRvIGVuc3VyZSBhIHNlcGFyYXRlIGxvY2FsIGluc3RhbmNlIGZvciBlYWNoIENoYXRTZXJ2aWNlIGluc3RhbmNlXG4gIHByaXZhdGUgYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlID0gbmV3KEFzc2lzdGFudFdzRnJhbWVzU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xvY28gPSBpbmplY3QoVHJhbnNsb2NvU2VydmljZSk7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGFzc2lzdGFudCBwcm9jZXNzLlxuICAgKiBJdCBpbmNsdWRlcyBidWlsZGluZyBhbmQgc3RhcnRpbmcgYSBjb25uZWN0aW9uLCBleGVjdXRpbmcgcGFyYWxsZWwgcmVxdWVzdHMgZm9yIG1vZGVscyBhbmQgZnVuY3Rpb25zLCBhbmQgaGFuZGxpbmcgZXJyb3JzIGR1cmluZyB0aGUgcHJvY2Vzcy5cbiAgICog4pqg77iPIFRoaXMgbWV0aG9kIE1VU1QgYmUgY2FsbGVkIE9OTFkgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkSW4gYW5kIG9uY2Ugd2hlbiB0aGUgYXNzaXN0YW50IGlzIGluaXRpYWxpemVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlPGJvb2xlYW4+IGluZGljYXRpbmcgdGhlIHN1Y2Nlc3Mgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuXG4gICAqL1xuICBpbml0KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIC8vIEVuc3VyZSBhbGwgbG9naWMgaXMgZXhlY3V0ZWQgd2hlbiBzdWJzY3JpYmVkIHRvIHRoZSBvYnNlcnZhYmxlXG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IHtcbiAgICAgIHRoaXMuX2luaXRBc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZSgpO1xuICAgICAgcmV0dXJuIGZyb20odGhpcy5pbml0Q2hhdENvbmZpZygpKTtcbiAgICB9KS5waXBlKFxuICAgICAgLy8gV2FpdCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYmUgaW5pdGlhbGl6ZWRcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmluaXRDb25maWckLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCB0YWtlKDEpKSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLmdldFdTUmVxdWVzdHNVcmwoKTtcbiAgICAgICAgdGhpcy5nZXRSRVNUUmVxdWVzdHNVcmwoKTtcbiAgICAgICAgdGhpcy5faW5pdEFzc2lzdGFudE1ldGFkYXRhU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9pbml0QXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuX2luaXRTYXZlZENoYXRzU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9pbml0RGVidWdNZXNzYWdlU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9pbml0U2lnbmFsUkNvbm5lY3Rpb25TZXJ2aWNlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrVmVyc2lvbkFsaWdubWVudCgpO1xuICAgICAgfSksXG4gICAgICAvLyBCdWlsZCBhbmQgc3RhcnQgdGhlIFNpZ25hbFIgY29ubmVjdGlvblxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYnVpbGRDb25uZWN0aW9uKCkpLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UgaGVyZSwgbm93IHRoYXQgJ3RoaXMuY29ubmVjdGlvbicgaXMgc2V0XG4gICAgICAgIHRoaXMuX2luaXRBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5pbml0TWVzc2FnZUhhbmRsZXJzKCk7XG4gICAgICB9KSxcbiAgICAgIC8vIFN0YXJ0IHRoZSBjb25uZWN0aW9uXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zdGFydENvbm5lY3Rpb24oKSksXG4gICAgICAvLyBGZXRjaCBtZXRhZGF0YSBpbiBwYXJhbGxlbFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIGZvcmtKb2luKFtcbiAgICAgICAgICB0aGlzLmxpc3RNb2RlbHMoKSxcbiAgICAgICAgICB0aGlzLmxpc3RGdW5jdGlvbnMoKVxuICAgICAgICBdKVxuICAgICAgKSxcbiAgICAgIC8vIE1hcCB0aGUgcmVzdWx0cyBvZiBwYXJhbGxlbCByZXF1ZXN0cyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzXG4gICAgICBtYXAoKFttb2RlbHMsIGZ1bmN0aW9uc10pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKG1vZGVscyAhPT0gdW5kZWZpbmVkICYmIGZ1bmN0aW9ucyAhPT0gdW5kZWZpbmVkICYmICEhbW9kZWxzICYmICEhZnVuY3Rpb25zKTtcbiAgICAgICAgdGhpcy5pbml0UHJvY2VzcyQubmV4dChyZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSksXG4gICAgICAvLyBBbnkgZXJyb3JzIGR1cmluZyB0aGUgcHJvY2VzcyBhcmUgY2F1Z2h0LCBsb2dnZWQsIGFuZCByZS10aHJvd24gdG8gcHJvcGFnYXRlIHRoZSBlcnJvciBmdXJ0aGVyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvY2N1cnJlZDonLCBlcnJvcik7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZSgxKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHRoZSBlbmRwb2ludCB0byB1c2UgZm9yIHRoZSB3ZWJzb2NrZXQgcmVxdWVzdHNcbiAgICogSXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGFwcCBjb25maWdcbiAgICovXG4gIGdldFdTUmVxdWVzdHNVcmwoKSB7XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS5nZXRXU1JlcXVlc3RzVXJsKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHRoZSBlbmRwb2ludCB0byB1c2UgZm9yIHRoZSBodHRwIHJlcXVlc3RzXG4gICAqIEl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBhcHAgY29uZmlnXG4gICAqL1xuICBnZXRSRVNUUmVxdWVzdHNVcmwoKSB7XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS5nZXRSRVNUUmVxdWVzdHNVcmwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHBsdWdpbiB2ZXJzaW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIG9mIFBsdWdpblZlcnNpb24gb3IgdW5kZWZpbmVkLlxuICAgKi9cbiAgZ2V0UGx1Z2luVmVyc2lvbigpOiBPYnNlcnZhYmxlPFBsdWdpblZlcnNpb24gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UuZ2V0UGx1Z2luVmVyc2lvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgU2luZXF1YSBFbnRlcnByaXNlIFNlYXJjaCB2ZXJzaW9uLlxuICAgKiBAcmV0dXJucyBUaGUgU2luZXF1YSBFbnRlcnByaXNlIFNlYXJjaCB2ZXJzaW9uIGFzIGEgc3RyaW5nLCBvciB1bmRlZmluZWQgaWYgbm90IGF2YWlsYWJsZS5cbiAgICovXG4gIGdldFNpbmVxdWFFU1ZlcnNpb24oKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UuZ2V0U2luZXF1YUVTVmVyc2lvbigpO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgYW5kIGxvZ3MgdGhlIHZlcnNpb24gYWxpZ25tZW50IGJldHdlZW4gdGhlIEFuZ3VsYXIgbGlicmFyeSwgcGx1Z2luLCBhbmQgU2luZXF1YSBFUy5cbiAgICogSXQgZmV0Y2hlcyB0aGUgcGx1Z2luIGFuZCBTaW5lcXVhIEVTIHZlcnNpb25zIGluIHBhcmFsbGVsIGFuZCBsb2dzIHRoZSBpbmZvcm1hdGlvbiB0byB0aGUgY29uc29sZS5cbiAgICovXG4gIGNoZWNrVmVyc2lvbkFsaWdubWVudCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBmb3JrSm9pbihbXG4gICAgICB0aGlzLmdldFNpbmVxdWFFU1ZlcnNpb24oKSxcbiAgICAgIHRoaXMuZ2V0UGx1Z2luVmVyc2lvbigpXG4gICAgXSkucGlwZShcbiAgICAgIHRhcCgoW2VzVmVyc2lvbiwgcGx1Z2luVmVyc2lvbl0pID0+IHtcbiAgICAgICAgY29uc3QgaW5mb01lc3NhZ2UgPSBgW0lORk9dIC0gQXNzaXN0YW50IGluc3RhbmNlIFske3RoaXMuY2hhdEluc3RhbmNlSWR9XTogQW5ndWxhciBMaWJyYXJ5IFske0xJQl9WRVJTSU9OfV0gUGx1Z2luIFske3BsdWdpblZlcnNpb24/LnBsdWdpblZlcnNpb259XSBCdWlsZCBbJHtlc1ZlcnNpb259XWA7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIFwiJWPihLnvuI8gXCIgKyBpbmZvTWVzc2FnZSxcbiAgICAgICAgICBcImJhY2tncm91bmQ6ICNFMEY4Rjg7IGNvbG9yOiAjMjIyOyBib3JkZXI6IDFweCBzb2xpZCAjMjIyOyBwYWRkaW5nOiAycHggNnB4OyBib3JkZXItcmFkaXVzOiA0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7XCIsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChwbHVnaW5WZXJzaW9uPy5wbHVnaW5WZXJzaW9uICE9PSBMSUJfVkVSU0lPTikge1xuICAgICAgICAgIGNvbnN0IHdhcm5pbmdNZXNzYWdlID0gYFtXQVJOXSAtIEFzc2lzdGFudCBpbnN0YW5jZSBbJHt0aGlzLmNoYXRJbnN0YW5jZUlkfV06IFZlcnNpb24gbWlzbWF0Y2ggYmV0d2VlbiB0aGUgQW5ndWxhciBsaWJyYXJ5IFske0xJQl9WRVJTSU9OfV0gYW5kIFBsdWdpbiBbJHtwbHVnaW5WZXJzaW9uPy5wbHVnaW5WZXJzaW9ufV0uXFxu8J+SoSBbSEVMUF0gUGxlYXNlIGVuc3VyZSBib3RoIGFyZSBvbiB0aGUgc2FtZSB2ZXJzaW9uIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMuYDtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIFwiJWPimqDvuI8gXCIgKyB3YXJuaW5nTWVzc2FnZSxcbiAgICAgICAgICAgIFwiYmFja2dyb3VuZDogI0ZGRjRFNTsgY29sb3I6ICMyMjI7IGJvcmRlcjogMXB4IHNvbGlkICMyMjI7IHBhZGRpbmc6IDJweCA2cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgZm9udC13ZWlnaHQ6IDUwMDtcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIFNhdmVkQ2hhdHNTZXJ2aWNlIHdpdGggdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRoZSBgU2F2ZWRDaGF0c1NlcnZpY2VgIGJ5IHByb3ZpZGluZyBpdCB3aXRoIGEgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogKGBTYXZlZENoYXRzT3BlcmF0aW9uQ29uZmlnYCkgdGhhdCBpbmNsdWRlcyB2YXJpb3VzIGNhbGxiYWNrcyBhbmQgcHJvcGVydGllcyByZXF1aXJlZFxuICAgKiBmb3IgaXRzIG9wZXJhdGlvbi4gVGhlIGluaXRpYWxpemF0aW9uIHdpbGwgb25seSBwcm9jZWVkIGlmIGJvdGggYGFzc2lzdGFudENvbmZpZyRgIGFuZFxuICAgKiBgUkVTVF9SRVFVRVNUX1VSTGAgYXJlIGF2YWlsYWJsZS5cbiAgICpcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGluY2x1ZGVzOlxuICAgKiAtIEFwcGxpY2F0aW9uIG5hbWUgcmV0cmlldmFsLlxuICAgKiAtIEluc3RhbmNlIElEIHJldHJpZXZhbC5cbiAgICogLSBSRVNUIEFQSSBVUkwgcmV0cmlldmFsLlxuICAgKiAtIERlYnVnIGZsYWcgcmV0cmlldmFsLlxuICAgKiAtIENoYXQgSUQgZm9yIG5ldyBzYXZlcy5cbiAgICogLSBTYXZlZCBjaGF0cyBlbmFibGVtZW50IGNoZWNrLlxuICAgKiAtIE1ldGhvZHMgZm9yIHNldHRpbmcgYSBzYXZlZCBjaGF0IElELCB1cGRhdGluZyB0aGUgc2F2ZWQgY2hhdHMgbGlzdCwgYW5kIGdlbmVyYXRpbmcgYXVkaXQgZXZlbnRzLlxuICAgKlxuICAgKiBJZiB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFyZSBub3QgcmVhZHksIGFuIGVycm9yIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2luaXRTYXZlZENoYXRzU2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlICYmIHRoaXMuUkVTVF9SRVFVRVNUX1VSTCkge1xuICAgICAgY29uc3Qgc2F2ZWRDaGF0c09wQ29uZmlnOiBTYXZlZENoYXRzT3BlcmF0aW9uQ29uZmlnID0ge1xuICAgICAgICBnZXRBcHBOYW1lOiAoKSA9PiB0aGlzLmFwcFNlcnZpY2UuYXBwTmFtZSxcbiAgICAgICAgZ2V0SW5zdGFuY2VJZDogKCkgPT4gdGhpcy5jaGF0SW5zdGFuY2VJZCxcbiAgICAgICAgZ2V0UmVzdFVybDogKCkgPT4gdGhpcy5SRVNUX1JFUVVFU1RfVVJMLFxuICAgICAgICBnZXREZWJ1Z0ZsYWc6ICgpID0+IHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5kZWJ1ZyxcbiAgICAgICAgaXNTYXZlZENoYXRzRW5hYmxlZDogKCkgPT4gISF0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWU/LnNhdmVkQ2hhdFNldHRpbmdzLmVuYWJsZWQsXG4gICAgICAgIHNldFNhdmVkQ2hhdHNFcnJvclN0YXR1czogKGhhc0Vycm9yKSA9PiB0aGlzLnNhdmVkQ2hhdHNFcnJvciQubmV4dChoYXNFcnJvciksXG4gICAgICAgIHVwZGF0ZVNhdmVkQ2hhdHNMaXN0OiAoY2hhdHMpID0+IHRoaXMuc2F2ZWRDaGF0cyQubmV4dChjaGF0cyksXG4gICAgICAgIGdlbmVyYXRlQXVkaXRFdmVudDogKHR5cGUsIGRldGFpbHMsIGlkKSA9PiB0aGlzLmdlbmVyYXRlQXVkaXRFdmVudCh0eXBlLCBkZXRhaWxzLCBpZCksXG4gICAgICB9O1xuICAgICAgdGhpcy5zYXZlZENoYXRzU2VydmljZS5pbml0KHNhdmVkQ2hhdHNPcENvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgaWRlYWxseSBub3QgaGFwcGVuIGlmIGluaXQgb3JkZXIgaXMgY29ycmVjdFxuICAgICAgY29uc29sZS5lcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIFNhdmVkQ2hhdHNTZXJ2aWNlOiBhc3Npc3RhbnRDb25maWcgb3IgUkVTVF9SRVFVRVNUX1VSTCBub3QgcmVhZHkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgU2lnbmFsUiBjb25uZWN0aW9uIHNlcnZpY2Ugd2l0aCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0aGUgU2lnbmFsUiBjb25uZWN0aW9uIHNlcnZpY2UgaXMgcHJvcGVybHkgc2V0IHVwXG4gICAqIGJ5IHByb3ZpZGluZyBpdCB3aXRoIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIHZhbHVlcywgc3VjaCBhcyB0aGUgV2ViU29ja2V0XG4gICAqIHJlcXVlc3QgVVJMIGFuZCBhc3Npc3RhbnQgY29uZmlndXJhdGlvbi4gSXQgYWxzbyBtYW5hZ2VzIHRoZSBTaWduYWxSIGh1YiBjb25uZWN0aW9uXG4gICAqIGluc3RhbmNlLlxuICAgKlxuICAgKiBQcmVjb25kaXRpb25zOlxuICAgKiAtIGBhc3Npc3RhbnRDb25maWckLnZhbHVlYCBtdXN0IGJlIGF2YWlsYWJsZS5cbiAgICogLSBgV1NfUkVRVUVTVF9VUkxgIG11c3QgYmUgZGVmaW5lZC5cbiAgICpcbiAgICogSWYgdGhlc2UgcHJlY29uZGl0aW9ucyBhcmUgbm90IG1ldCwgYW4gZXJyb3IgaXMgbG9nZ2VkIHRvIHRoZSBjb25zb2xlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdFNpZ25hbFJDb25uZWN0aW9uU2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlICYmIHRoaXMuV1NfUkVRVUVTVF9VUkwpIHtcbiAgICAgICAgY29uc3Qgc2lnbmFsUk9wQ29uZmlnOiBTaWduYWxSQ29ubmVjdGlvbk9wZXJhdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgICAgIGdldFdzUmVxdWVzdFVybDogKCkgPT4gdGhpcy5XU19SRVFVRVNUX1VSTCxcbiAgICAgICAgICAgIGdldEFzc2lzdGFudENvbmZpZ1ZhbHVlOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgICAgICBnZXRIdWJDb25uZWN0aW9uOiAoKSA9PiB0aGlzLmNvbm5lY3Rpb24sIC8vIFVzaW5nIGdldEh1YkNvbm5lY3Rpb24gYXMgcGVyIHVzZXIncyBmaWxlXG4gICAgICAgICAgICBzZXRIdWJDb25uZWN0aW9uOiAoY29ubikgPT4geyB0aGlzLmNvbm5lY3Rpb24gPSBjb25uOyB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2lnbmFsUkNvbm5lY3Rpb25TZXJ2aWNlLmluaXQoc2lnbmFsUk9wQ29uZmlnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBpZGVhbGx5IG5vdCBoYXBwZW4gaWYgaW5pdCBvcmRlciBpcyBjb3JyZWN0XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSBTaWduYWxSQ29ubmVjdGlvblNlcnZpY2U6IGFzc2lzdGFudENvbmZpZyBvciBXU19SRVFVRVNUX1VSTCBub3QgcmVhZHkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgQXNzaXN0YW50IENvbmZpZ3VyYXRpb24gU2VydmljZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9uIGNvbnRleHQuXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBieSBwcm92aWRpbmcgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9uc1xuICAgKiBhbmQgc3RhdGUgbWFuYWdlbWVudCBtZWNoYW5pc21zIHJlcXVpcmVkIGZvciB0aGUgYXNzaXN0YW50J3MgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRleHQgaW5jbHVkZXM6XG4gICAqIC0gTWV0aG9kcyB0byByZXRyaWV2ZSBjaGF0IGluc3RhbmNlIGFuZCBjaGF0IElEcy5cbiAgICogLSBNZXRob2RzIHRvIGdldCBhbmQgc2V0IGFzc2lzdGFudCBjb25maWd1cmF0aW9uIHZhbHVlcy5cbiAgICogLSBNZXRob2RzIHRvIHNldCBXZWJTb2NrZXQgYW5kIFJFU1QgcmVxdWVzdCBVUkxzLlxuICAgKiAtIE1ldGhvZHMgdG8gdXBkYXRlIHRoZSBpbml0aWFsaXphdGlvbiBjb25maWd1cmF0aW9uIHN0YXR1cy5cbiAgICogLSBBIG1ldGhvZCB0byBnZW5lcmF0ZSBhdWRpdCBldmVudHMgZm9yIHRyYWNraW5nIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9pbml0QXNzaXN0YW50Q29uZmlndXJhdGlvblNlcnZpY2UoKSB7XG4gICAgY29uc3QgY29uZmlnT3BDb250ZXh0OiBBc3Npc3RhbnRDb25maWd1cmF0aW9uT3BlcmF0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgZ2V0Q2hhdEluc3RhbmNlSWQ6ICgpID0+IHRoaXMuY2hhdEluc3RhbmNlSWQsXG4gICAgICAgIGdldENoYXRJZDogKCkgPT4gdGhpcy5jaGF0SWQsXG4gICAgICAgIGdldEFzc2lzdGFudENvbmZpZ1ZhbHVlOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgIHNldFdTUmVxdWVzdHNVcmw6ICh1cmwpID0+IHRoaXMuV1NfUkVRVUVTVF9VUkwgPSB1cmwsXG4gICAgICAgIHNldFJFU1RSZXF1ZXN0c1VybDogKHVybCkgPT4gdGhpcy5SRVNUX1JFUVVFU1RfVVJMID0gdXJsLFxuICAgICAgICBzZXRBc3Npc3RhbnRDb25maWc6IChjb25maWcpID0+IHRoaXMuYXNzaXN0YW50Q29uZmlnJC5uZXh0KGNvbmZpZyksXG4gICAgICAgIHNldEluaXRDb25maWdTdGF0dXM6IChzdGF0dXMpID0+IHRoaXMuaW5pdENvbmZpZyQubmV4dChzdGF0dXMpLFxuICAgICAgICBnZW5lcmF0ZUF1ZGl0RXZlbnQ6ICh0eXBlLCBkZXRhaWxzLCBpZCkgPT4gdGhpcy5nZW5lcmF0ZUF1ZGl0RXZlbnQodHlwZSwgZGV0YWlscywgaWQpXG4gICAgfTtcbiAgICB0aGlzLmFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmluaXQoY29uZmlnT3BDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgQXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlIHdpdGggdGhlIG5lY2Vzc2FyeSBvcGVyYXRpb24gY29udGV4dC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBgYXNzaXN0YW50Q29uZmlnJGAgdmFsdWUgYW5kIGBSRVNUX1JFUVVFU1RfVVJMYCBhcmUgYXZhaWxhYmxlLlxuICAgKiBJZiBib3RoIGFyZSByZWFkeSwgaXQgY3JlYXRlcyBhbiBgQXNzaXN0YW50TWV0YWRhdGFPcGVyYXRpb25Db250ZXh0YCBvYmplY3QgYW5kXG4gICAqIGluaXRpYWxpemVzIHRoZSBgYXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlYCB3aXRoIGl0LiBUaGUgb3BlcmF0aW9uIGNvbnRleHQgcHJvdmlkZXNcbiAgICogbWV0aG9kcyB0byByZXRyaWV2ZSB0aGUgUkVTVCBVUkwsIGFzc2lzdGFudCBjb25maWd1cmF0aW9uLCBhbmQgdG8gc2V0IG1vZGVscyBhbmQgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBJZiB0aGUgcmVxdWlyZWQgdmFsdWVzIGFyZSBub3QgcmVhZHksIGFuIGVycm9yIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2luaXRBc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSAmJiB0aGlzLlJFU1RfUkVRVUVTVF9VUkwpIHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhT3BDb250ZXh0OiBBc3Npc3RhbnRNZXRhZGF0YU9wZXJhdGlvbkNvbnRleHQgPSB7XG4gICAgICAgIGdldFJlc3RVcmw6ICgpID0+IHRoaXMuUkVTVF9SRVFVRVNUX1VSTCxcbiAgICAgICAgZ2V0QXNzaXN0YW50Q29uZmlnVmFsdWU6ICgpID0+IHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSxcbiAgICAgICAgc2V0TW9kZWxzOiAobW9kZWxzKSA9PiB7IHRoaXMubW9kZWxzID0gbW9kZWxzOyB9LFxuICAgICAgICBzZXRGdW5jdGlvbnM6IChmdW5jdGlvbnMpID0+IHsgdGhpcy5mdW5jdGlvbnMgPSBmdW5jdGlvbnM7IH1cbiAgICAgIH07XG4gICAgICB0aGlzLmFzc2lzdGFudE1ldGFkYXRhU2VydmljZS5pbml0KG1ldGFkYXRhT3BDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIEFzc2lzdGFudE1ldGFkYXRhU2VydmljZTogYXNzaXN0YW50Q29uZmlnIG9yIFJFU1RfUkVRVUVTVF9VUkwgbm90IHJlYWR5LlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIEFzc2lzdGFudCBUb2tlbnMgVHJhY2tpbmcgU2VydmljZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9uIGNvbnRleHQuXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIHNlcnZpY2UgYnkgcHJvdmlkaW5nIGl0IHdpdGggZnVuY3Rpb25zIHRvIG1hbmFnZSBxdW90YXMsXG4gICAqIHRva2VuIGNvbnN1bXB0aW9uLCB1c2FnZSBtZXRyaWNzLCBhbmQgYXVkaXQgZXZlbnRzLCBhcyB3ZWxsIGFzIGFjY2VzcyB0byBhc3Npc3RhbnQgY29uZmlndXJhdGlvblxuICAgKiBhbmQgbW9kZWwgcmV0cmlldmFsLlxuICAgKlxuICAgKiBUaGUgaW5pdGlhbGl6YXRpb24gd2lsbCBvbmx5IHByb2NlZWQgaWYgdGhlIGFzc2lzdGFudCBjb25maWd1cmF0aW9uIGlzIGF2YWlsYWJsZS5cbiAgICogSWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgbm90IHJlYWR5LCBhbiBlcnJvciBtZXNzYWdlIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2luaXRBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSkge1xuICAgICAgY29uc3QgdG9rZW5zT3BDb250ZXh0OiBBc3Npc3RhbnRUb2tlbnNUcmFja2luZ09wZXJhdGlvbkNvbnRleHQgPSB7XG4gICAgICAgIGdldEFzc2lzdGFudENvbmZpZ1ZhbHVlOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgIHNldFF1b3RhOiAocXVvdGEpID0+IHRoaXMucXVvdGEkLm5leHQocXVvdGEpLFxuICAgICAgICBzZXRVc2VyVG9rZW5Db25zdW1wdGlvbjogKGNvbnN1bXB0aW9uKSA9PiB0aGlzLnVzZXJUb2tlbkNvbnN1bXB0aW9uJC5uZXh0KGNvbnN1bXB0aW9uKSxcbiAgICAgICAgc2V0Q2hhdFVzYWdlTWV0cmljczogKG1ldHJpY3MpID0+IHRoaXMuY2hhdFVzYWdlTWV0cmljcyQubmV4dChtZXRyaWNzKSxcbiAgICAgICAgc2V0Q2hhdFRva2VuQ29uc3VtcHRpb246IChjb25zdW1wdGlvbikgPT4gdGhpcy5jaGF0VG9rZW5Db25zdW1wdGlvbiQubmV4dChjb25zdW1wdGlvbiksXG4gICAgICAgIGdlbmVyYXRlQXVkaXRFdmVudDogKHR5cGUsIGRldGFpbHMsIGlkKSA9PiB0aGlzLmdlbmVyYXRlQXVkaXRFdmVudCh0eXBlLCBkZXRhaWxzLCBpZCksXG4gICAgICAgIGdldE1vZGVsOiAoc2VydmljZUlkLCBtb2RlbElkKSA9PiB0aGlzLmdldE1vZGVsKHNlcnZpY2VJZCwgbW9kZWxJZClcbiAgICAgIH07XG4gICAgICB0aGlzLmFzc2lzdGFudFRva2Vuc1RyYWNraW5nU2VydmljZS5pbml0KHRva2Vuc09wQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSBBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2U6IGFzc2lzdGFudENvbmZpZyBub3QgcmVhZHkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgQXNzaXN0YW50IFdlYlNvY2tldCBGcmFtZXMgU2VydmljZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9uIGNvbnRleHQuXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UgdG8gZnVuY3Rpb24gcHJvcGVybHkuXG4gICAqIEl0IGVuc3VyZXMgdGhhdCB0aGUgYXNzaXN0YW50IGNvbmZpZ3VyYXRpb24gYW5kIGNvbm5lY3Rpb24gYXJlIGF2YWlsYWJsZSBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBzZXJ2aWNlLlxuICAgKlxuICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRleHQgcHJvdmlkZXMgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgc3RhdGUgbWFuYWdlbWVudCBtZXRob2RzLCBpbmNsdWRpbmc6XG4gICAqIC0gQWNjZXNzaW5nIHRoZSBhc3Npc3RhbnQgY29uZmlndXJhdGlvbiwgY2hhdCBpbnN0YW5jZSBJRCwgc2F2ZWQgY2hhdCBJRCwgYW5kIGNoYXQgaGlzdG9yeS5cbiAgICogLSBNYW5hZ2luZyBzdHJlYW1pbmcgYW5kIHN0b3BwaW5nIGdlbmVyYXRpb24gc3RhdHVzZXMuXG4gICAqIC0gVXBkYXRpbmcgcXVvdGEgYW5kIGNoYXQgdXNhZ2UgbWV0cmljcy5cbiAgICogLSBHZW5lcmF0aW5nIGF1ZGl0IGV2ZW50cy5cbiAgICogLSBNYW5hZ2luZyBzYXZlZCBjaGF0cyAoYWRkaW5nLCB1cGRhdGluZywgYW5kIGxpc3RpbmcpLlxuICAgKlxuICAgKiBJZiB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIChgYXNzaXN0YW50Q29uZmlnJGAgYW5kIGBjb25uZWN0aW9uYCkgYXJlIG5vdCByZWFkeSwgYW4gZXJyb3IgaXMgbG9nZ2VkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdEFzc2lzdGFudFdzRnJhbWVzU2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlICYmIHRoaXMuY29ubmVjdGlvbikge1xuICAgICAgY29uc3Qgd3NGcmFtZXNPcENvbnRleHQ6IEFzc2lzdGFudFdzRnJhbWVzQ29udGV4dCA9IHtcbiAgICAgICAgZ2V0QXNzaXN0YW50Q29uZmlnOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgIGdldENoYXRJbnN0YW5jZUlkOiAoKSA9PiB0aGlzLmNoYXRJbnN0YW5jZUlkLFxuICAgICAgICBnZXRDaGF0SWQ6ICgpID0+IHRoaXMuY2hhdElkLFxuICAgICAgICBnZXRIdWJDb25uZWN0aW9uOiAoKSA9PiB0aGlzLmNvbm5lY3Rpb24sXG4gICAgICAgIGdldENoYXRIaXN0b3J5OiAoKSA9PiB0aGlzLmNoYXRIaXN0b3J5LFxuICAgICAgICBzZXRTdHJlYW1pbmdTdGF0dXM6IChpc1N0cmVhbWluZykgPT4gdGhpcy5zdHJlYW1pbmckLm5leHQoaXNTdHJlYW1pbmcpLFxuICAgICAgICBzZXRDaGF0SGlzdG9yeTogKGhpc3RvcnkpID0+IHsgdGhpcy5jaGF0SGlzdG9yeSA9IGhpc3Rvcnk7IH0sXG4gICAgICAgIHNldFN0b3BwaW5nR2VuZXJhdGlvblN0YXR1czogKGlzU3RvcHBpbmcpID0+IHRoaXMuc3RvcHBpbmdHZW5lcmF0aW9uJC5uZXh0KGlzU3RvcHBpbmcpLFxuICAgICAgICBzZXRTYXZlZENoYXRzRXJyb3JTdGF0dXM6IChoYXNFcnJvcikgPT4gdGhpcy5zYXZlZENoYXRzRXJyb3IkLm5leHQoaGFzRXJyb3IpLFxuICAgICAgICB1cGRhdGVRdW90YTogKHF1b3RhLCBwcm9wYWdhdGVFcnJvcikgPT4gdGhpcy51cGRhdGVRdW90YShxdW90YSwgcHJvcGFnYXRlRXJyb3IpLFxuICAgICAgICB1cGRhdGVDaGF0VXNhZ2VNZXRyaWNzOiAobWV0cmljcykgPT4gdGhpcy51cGRhdGVDaGF0VXNhZ2VNZXRyaWNzKG1ldHJpY3MpLFxuICAgICAgICBnZW5lcmF0ZUF1ZGl0RXZlbnQ6ICh0eXBlLCBkZXRhaWxzLCBpZCkgPT4gdGhpcy5nZW5lcmF0ZUF1ZGl0RXZlbnQodHlwZSwgZGV0YWlscywgaWQpLFxuICAgICAgICBhZGRTYXZlZENoYXQ6IChpZCwgbWVzc2FnZXMpID0+IHRoaXMuYWRkU2F2ZWRDaGF0KGlkLCBtZXNzYWdlcyksXG4gICAgICAgIHVwZGF0ZVNhdmVkQ2hhdDogKGlkLCBuYW1lLCBtZXNzYWdlcykgPT4gdGhpcy51cGRhdGVTYXZlZENoYXQoaWQsIG5hbWUsIG1lc3NhZ2VzKSxcbiAgICAgICAgbGlzdFNhdmVkQ2hhdDogKCkgPT4gdGhpcy5saXN0U2F2ZWRDaGF0KCksXG4gICAgICAgIGlzRXhpc3RpbmdTYXZlZENoYXQ6IChpZCkgPT4gdGhpcy5pc0V4aXN0aW5nU2F2ZWRDaGF0KGlkKVxuICAgICAgfTtcbiAgICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLmluaXQod3NGcmFtZXNPcENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSBBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2U6IGNvcmUgZGVwZW5kZW5jaWVzIG5vdCByZWFkeS5cIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdERlYnVnTWVzc2FnZVNlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSAmJiB0aGlzLlJFU1RfUkVRVUVTVF9VUkwpIHtcbiAgICAgIGNvbnN0IGRlYnVnTWVzc2FnZU9wQ29udGV4dDogRGVidWdNZXNzYWdlT3BlcmF0aW9uQ29uZmlnID0ge1xuICAgICAgICBnZXRSZXN0VXJsOiAoKSA9PiB0aGlzLlJFU1RfUkVRVUVTVF9VUkxcbiAgICAgIH07XG4gICAgICB0aGlzLmRlYnVnTWVzc2FnZVNlcnZpY2UuaW5pdChkZWJ1Z01lc3NhZ2VPcENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgRGVidWdNZXNzYWdlU2VydmljZTogYXNzaXN0YW50Q29uZmlnIG9yIFJFU1RfUkVRVUVTVF9VUkwgbm90IHJlYWR5LlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXQgYXNzaXN0YW50cygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEFzc2lzdGFudHNTZXR0aW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlXG4gICAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlXG4gICAqL1xuICBnZXQgY2hhdEluc3RhbmNlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhdEluc3RhbmNlSWQ7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdCB0aGUgaW5zdGFuY2UgSUQgb2YgdGhlIGNoYXQgc2VydmljZVxuICAgKiBAcGFyYW0gaW5zdGFuY2VJZCBUaGUgaW5zdGFuY2UgSUQgb2YgdGhlIGNoYXQgc2VydmljZVxuICAgKi9cbiAgc2V0Q2hhdEluc3RhbmNlSWQoaW5zdGFuY2VJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fY2hhdEluc3RhbmNlSWQgPSBpbnN0YW5jZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSUQgb2YgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gc2F2ZS9nZXQvZGVsZXRlIHRoZSBkaXNjdXNzaW9uIGFuZCBpZGVudGlmeSBhdWRpdCBldmVudHNcbiAgICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvblxuICAgKi9cbiAgZ2V0IGNoYXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGF0SWQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW4gR1VJRCBmb3IgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gc2F2ZS9nZXQvZGVsZXRlIGl0IGFuZCBpZGVudGlmeSBhdWRpdCBldmVudHNcbiAgICogQHBhcmFtIGNoYXRJZCBpZiBwcm92aWRlZCwgaXQgd2lsbCBiZSBjb25zaWRlcmVkIGFzIHRoZSBJRCBvZiB0aGUgY3VycmVudCBjaGF0IGRpc2N1c3Npb24gd2hpY2ggaXMgdXNlZCB0byBpZGVudGlmeSBhdWRpdCBldmVudHNcbiAgICovXG4gIGdlbmVyYXRlQ2hhdElkKGNoYXRJZD86IHN0cmluZykge1xuICAgIHRoaXMuX2NoYXRJZCA9IGNoYXRJZCB8fCBndWlkKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgY2hhdCBjb25maWcgYnkgbWFuYWdpbmcgT05MWSBzdWItb2JqZWN0ICoqZGVmYXVsdFZhbHVlcyoqIGNvbmZpZ3Mgb2YgdGhlIHN0YW5kYXJkIGFwcCBjb25maWcgKGRlZmluZWQgaW4gdGhlIGN1c3RvbWl6YXRpb24ganNvbiB0YWIgKSBhbmQgdGhlIHVzZXIgcHJlZmVyZW5jZXMuXG4gICAqIFRvIGRvIHNvLCBhIHRyYWNraW5nIG1lY2hhbmlzbSBpcyBpbXBsZW1lbnRlZCB0byBub3RpZnkgdGhlIHVzZXIgYWJvdXQgdGhlIGF2YWlsYWJsZSB1cGRhdGVzIGluIHRoZSBkZWZhdWx0VmFsdWVzIG9iamVjdCBvZiB0aGUgc3RhbmRhcmQgYXBwIGNvbmZpZy5cbiAgICogVGhlIHJlc3Qgb2YgdGhlIGNvbmZpZyBvYmplY3QgY29taW5nIGZyb20gXCJzdGFuZGFyZCBhcHAgY29uZmlnXCIgaXMgdXNlZCBhcyBpdCBpcyB3aXRob3V0IGFueSBvdmVycmlkZS5cbiAgICogVGh1cywgdGhlIHVzZXIgcHJlZmVyZW5jZXMgYXJlIHVzZWQgb25seSBmb3IgdGhlIGRlZmF1bHRWYWx1ZXMgb2JqZWN0LlxuICAgKiBUaGlzIHByb3ZpZGUgYSBjZW50cmFsaXplZCB3YXkgdG8gbWFuYWdlIHRoZSByZXN0IG9mIHRoZSBjb25maWcgb2JqZWN0IGJ5IGFkbWlucyBhbmQgZW5zdXJlIGEgdW5pcXVlIGNvbW1vbiBiZWhhdmlvciBmb3IgYWxsIHVzZXJzLlxuICAgKi9cbiAgYXN5bmMgaW5pdENoYXRDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS5pbml0Q2hhdENvbmZpZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY2hhdCBjb25maWcgYW5kIHN0b3JlIGl0cyBkZWZhdWx0VmFsdWVzIGluIHRoZSB1c2VyIHByZWZlcmVuY2VzXG4gICAqIEBwYXJhbSBjb25maWcgIFRoZSB1cGRhdGVkIGNoYXQgY29uZmlnXG4gICAqIEBwYXJhbSBoYXNoZXMgIFRoZSB1cGRhdGVkIGhhc2hlcyB0byBzdG9yZSBpbiB0aGUgdXNlciBwcmVmZXJlbmNlc1xuICAgKiBAcGFyYW0gbm90aWZ5ICBXaGV0aGVyIHRvIG5vdGlmeSB0aGUgdXNlciBhYm91dCB0aGUgdXBkYXRlXG4gICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1cGRhdGUgaXMgc3VjY2Vzc2Z1bFxuICAgKiBAcGFyYW0gZXJyb3JDYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVwZGF0ZSBmYWlsc1xuICAgKi9cbiAgdXBkYXRlQ2hhdENvbmZpZyhcbiAgICBjb25maWc6IENoYXRDb25maWcsXG4gICAgaGFzaGVzPzogeyBcImFwcGxpZWQtZGVmYXVsdFZhbHVlcy1oYXNoXCI/OiBzdHJpbmc7IFwic2tpcHBlZC1kZWZhdWx0VmFsdWVzLWhhc2hcIj86IHN0cmluZyB9LFxuICAgIG5vdGlmeSA9IHRydWUsXG4gICAgc3VjY2Vzc0NhbGxiYWNrPzogKCkgPT4gYW55LFxuICAgIGVycm9yQ2FsbGJhY2s/OiAoKSA9PiBhbnlcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS51cGRhdGVDaGF0Q29uZmlnKGNvbmZpZywgaGFzaGVzLCBub3RpZnksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgKi9cbiAgb3ZlcnJpZGVVc2VyKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgdXNlck92ZXJyaWRlQWN0aXZlLCB1c2VyT3ZlcnJpZGUgfSA9IGdsb2JhbENvbmZpZztcbiAgICBpZiAoISh1c2VyT3ZlcnJpZGVBY3RpdmUgJiYgdXNlck92ZXJyaWRlKSkge1xuICAgICAgdGhpcy51c2VyT3ZlcnJpZGUkLm5leHQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXBhcmUgdGhlIHBheWxvYWQgdG8gc2VuZCB0byB0aGUgT3ZlcnJpZGVVc2VyIG1ldGhvZFxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBpbnN0YW5jZUlkOiB0aGlzLmNoYXRJbnN0YW5jZUlkLFxuICAgICAgdXNlcjogdXNlck92ZXJyaWRlLnVzZXJuYW1lLFxuICAgICAgZG9tYWluOiB1c2VyT3ZlcnJpZGUuZG9tYWluXG4gICAgfVxuXG4gICAgLy8gSW52b2tlIHRoZSBPdmVycmlkZVVzZXIgbWV0aG9kIGFuZCBoYW5kbGUgZXJyb3JzXG4gICAgdGhpcy5jb25uZWN0aW9uIS5pbnZva2UoJ092ZXJyaWRlVXNlcicsIGRhdGEpXG4gICAgICAudGhlbigocmVzKSA9PiB0aGlzLnVzZXJPdmVycmlkZSQubmV4dCghIXJlcykpXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbnZva2luZyBPdmVycmlkZVVzZXI6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7IC8vIFJldHVybiBhIHJlc29sdmVkIHByb21pc2UgdG8gaGFuZGxlIHRoZSBlcnJvciBhbmQgcHJldmVudCB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24gd2hlbiBubyBmdXJ0aGVyIGVycm9yIGhhbmRsaW5nIGV4aXN0cyBkb3duc3RyZWFtXG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyB0aGUgRmV0Y2ggQVBJIHRvIHJldHJpZXZlIGEgbmV3IG1lc3NhZ2UgZ2l2ZW4gYWxsIHByZXZpb3VzIG1lc3NhZ2VzXG4gICAqL1xuICBmZXRjaChtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSwgcXVlcnk6IFF1ZXJ5KTogT2JzZXJ2YWJsZTxDaGF0UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UuZmV0Y2gobWVzc2FnZXMsIHF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgbW9kZWxzIGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyXG4gICAqL1xuICBsaXN0TW9kZWxzKCk6IE9ic2VydmFibGU8R2xsbU1vZGVsRGVzY3JpcHRpb25bXSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmFzc2lzdGFudE1ldGFkYXRhU2VydmljZS5saXN0TW9kZWxzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBhdmFpbGFibGUgb24gdGhlIHNlcnZlciBBTkQgbWF0Y2hpbmcgZW5hYmxlZCBmdW5jdGlvbnMgaW4gdGhlIGNoYXQgY29uZmlnXG4gICAqL1xuICBsaXN0RnVuY3Rpb25zKCk6IE9ic2VydmFibGU8R2xsbUZ1bmN0aW9uW10gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UubGlzdEZ1bmN0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBhc3Npc3RhbnQgYW5zd2VyIGdlbmVyYXRpb24gYW5kIGNhbmNlbHMgYWxsIHRoZSBvbmdvaW5nIGFuZCBwZW5kaW5nIHJlbGF0ZWQgdGFza3NcbiAgICovXG4gIHN0b3BHZW5lcmF0aW9uKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmFzc2lzdGFudFdzRnJhbWVzU2VydmljZS5zdG9wR2VuZXJhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgaGFuZGxlciBmb3IgcXVvdGEgdXBkYXRlcyBlYWNoIHRpbWUgdGhlIGNoYXQgaXMgaW52b2tlZC5cbiAgICogSXQgZW1pdHMgdGhlIHVwZGF0ZWQgcXVvdGEgdG8gdGhlIHF1b3RhJCBzdWJqZWN0LCBlbWl0cyBhY2NvcmRpbmdseSB0aGUgdXBkYXRlZCB1c2VyJ3MgdG9rZW5zIGNvbnN1bXB0aW9uIGFuZCBub3RpZmllcyB0aGUgdXNlciBpZiB0aGUgbWF4IHF1b3RhIGlzIHJlYWNoZWQuXG4gICAqIEBwYXJhbSBxdW90YSBUaGUgdXBkYXRlZCBxdW90YVxuICAgKiBAcGFyYW0gcHJvcGFnYXRlRXJyb3IgV2hldGhlciB0byBwcm9wYWdhdGUgdGhlIGVycm9yIHRvIHRoZSBjYWxsZXJcbiAgICovXG4gIHVwZGF0ZVF1b3RhKHF1b3RhOiBRdW90YSwgcHJvcGFnYXRlRXJyb3IgPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlLnVwZGF0ZVF1b3RhKHF1b3RhLCBwcm9wYWdhdGVFcnJvcik7XG4gIH1cblxuICAvKipcbiAgICogQSBoYW5kbGVyIGZvciBjaGF0IHVzYWdlIG1ldHJpY3MgZWFjaCB0aW1lIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhc3Npc3RhbnQgcmVzcG9uc2UgaXMgY29tcGxldGVkLlxuICAgKiBJdCBlbWl0cyB0aGUgY2hhdCB1c2FnZSBtZXRyaWNzIHRvIHRoZSBjaGF0VXNhZ2VNZXRyaWNzJCBzdWJqZWN0LCBlbWl0cyBhY2NvcmRpbmdseSB0aGUgdXBkYXRlZCBjaGF0J3MgdG9rZW5zIGNvbnN1bXB0aW9uXG4gICAqIEBwYXJhbSBjaGF0VXNhZ2VNZXRyaWNzIFRoZSBjaGF0IHVzYWdlIG1ldHJpY3NcbiAgICovXG4gIHVwZGF0ZUNoYXRVc2FnZU1ldHJpY3MoY2hhdFVzYWdlTWV0cmljczogQ2hhdFVzYWdlTWV0cmljcyk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlLnVwZGF0ZUNoYXRVc2FnZU1ldHJpY3MoY2hhdFVzYWdlTWV0cmljcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtb2RlbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdpdmVuIChzZXJ2aWNlSWQgKyBtb2RlbElkKVxuICAgKiBJZiBhIG1vZGVsIGlzIG5vdCBmb3VuZCwgYW4gZXJyb3IgbWVzc2FnZSBpcyByZXR1cm5lZFxuICAgKiBAcGFyYW0gc2VydmljZUlkIFRoZSBzZXJ2aWNlSWQgb2YgdGhlIG1vZGVsXG4gICAqIEBwYXJhbSBtb2RlbElkIFRoZSBtb2RlbElkIG9mIHRoZSBtb2RlbFxuICAgKiBAcmV0dXJucyBUaGUgbW9kZWwgZGVzY3JpcHRpb25cbiAgICovXG4gIGdldE1vZGVsKHNlcnZpY2VJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcpOiBHbGxtTW9kZWxEZXNjcmlwdGlvbiB8IHVuZGVmaW5lZHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxzPy5maW5kKG0gPT4gbS5zZXJ2aWNlSWQgPT09IHNlcnZpY2VJZCAmJiBtLm1vZGVsSWQgPT09IG1vZGVsSWQpO1xuICAgIC8vIEhhbmRsZSBvYnNvbGV0ZSBjb25maWdcbiAgICBpZighbW9kZWwpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoYEZBVEFMIEVSUk9SIDogVGhlIG1vZGVsIChzZXJ2aWNlSWQgPSAnJHtzZXJ2aWNlSWR9JywgbW9kZWxJZCA9ICcke21vZGVsSWR9JykgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS4gUGxlYXNlIGNvbnRhY3QgYW4gYWRtaW4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uYCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZBVEFMIEVSUk9SIDogVGhlIG1vZGVsIChzZXJ2aWNlSWQgPSAnJHtzZXJ2aWNlSWR9JywgbW9kZWxJZCA9ICcke21vZGVsSWR9JykgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZWApO1xuICAgIH1cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGxpc3Qgc2F2ZWQgY2hhdHMgYmVsb25naW5nIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgdGhlIGFzc2lzdGFudFxuICAgKi9cbiAgbGlzdFNhdmVkQ2hhdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNhdmVkQ2hhdHNTZXJ2aWNlLmxpc3RDaGF0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2F2ZWQgY2hhdCB3aXRoIHRoZSBnaXZlbiBpZCwgaWYgZXhpc3RzLiBPdGhlcndpc2UsIHJldHVybiB1bmRlZmluZWRcbiAgICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgc2F2ZWQgY2hhdFxuICAgKi9cbiAgZ2V0U2F2ZWRDaGF0KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNhdmVkQ2hhdEhpc3RvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zYXZlZENoYXRzU2VydmljZS5nZXRDaGF0QnlJZChpZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBzYXZlZCBjaGF0IHdpdGggdGhlIGdpdmVuIGlkIGFscmVhZHkgZXhpc3RzXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHNhdmVkIGNoYXRcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc2F2ZWQgY2hhdCBleGlzdHMsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNFeGlzdGluZ1NhdmVkQ2hhdChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZWRDaGF0c1NlcnZpY2UuaXNFeGlzdGluZ0NoYXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYSBjaGF0IHdpdGggdGhlIGdpdmVuIG1lc3NhZ2VzXG4gICAqIEBwYXJhbSBtZXNzYWdlcyBUaGUgbWVzc2FnZXMgdG8gYWRkIHRvIHRoZSBzYXZlZCBjaGF0IGluZGV4XG4gICAqIEByZXR1cm5zIFRoZSBzYXZlZCBjaGF0XG4gICAqL1xuICBhZGRTYXZlZENoYXQoaWQ6IHN0cmluZywgbWVzc2FnZXM6IENoYXRNZXNzYWdlW10pOiBPYnNlcnZhYmxlPFNhdmVkQ2hhdFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZWRDaGF0c1NlcnZpY2UuYWRkQ2hhdChpZCwgbWVzc2FnZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHNhdmVkIGNoYXQgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHNhdmVkIGNoYXRcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5ldyBuYW1lIG9mIHRoZSBzYXZlZCBjaGF0LCBpZiBwcm92aWRlZFxuICAgKiBAcGFyYW0gbWVzc2FnZXMgVGhlIG1lc3NhZ2VzIHRvIHVwZGF0ZSB0aGUgc2F2ZWQgY2hhdCBoaXN0b3J5LCBpZiBwcm92aWRlZFxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzYXZlZCBjaGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXG4gICAqL1xuICB1cGRhdGVTYXZlZENoYXQoaWQ6IHN0cmluZywgbmFtZT86IHN0cmluZywgbWVzc2FnZXM/OiBDaGF0TWVzc2FnZVtdKTogT2JzZXJ2YWJsZTxTYXZlZENoYXRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnNhdmVkQ2hhdHNTZXJ2aWNlLnVwZGF0ZUNoYXQoaWQsIG5hbWUsIG1lc3NhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWxrIGRlbGV0ZSBvZiBzYXZlZCBjaGF0cyBtYXRjaGluZyB0aGUgZ2l2ZW4gaWRzXG4gICAqIEBwYXJhbSBpZHMgTGlzdCBvZiBpZHMgb2YgdGhlIHNhdmVkIGNoYXRzIHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGRlbGV0ZWQgY2hhdHNcbiAgICovXG4gIGRlbGV0ZVNhdmVkQ2hhdChpZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxEZWxldGVTYXZlZENoYXRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnNhdmVkQ2hhdHNTZXJ2aWNlLmRlbGV0ZUNoYXQoaWRzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWJ1Z01lc3NhZ2UobWVzc2FnZTogRGVidWdNZXNzYWdlKTogT2JzZXJ2YWJsZTxLdk9iamVjdCB8IExpc3RPYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWJ1Z01lc3NhZ2VTZXJ2aWNlLmdldERlYnVnTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIG91dC1vZi10aGUtYm94IGhhbmRsZXJzXG4gICAqIEl0IGlzIGEgcGxhY2Vob2xkZXIgZm9yIG5vbi1zdHJlYW1pbmcgc2NlbmFyaW9zLCB3aGVyZSB5b3UgaW52b2tlIGEgc3BlY2lmaWMgaHViIG1ldGhvZCwgYW5kIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBmcmFtZSBtZXNzYWdlKHMpXG4gICAqL1xuICBpbml0TWVzc2FnZUhhbmRsZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLmluaXRNZXNzYWdlSGFuZGxlcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBhbmQgcmVnaXN0ZXIgdGhlIGVudGlyZSBfbWVzc2FnZUhhbmRsZXJzIG1hcCBieSBtZXJnaW5nIHRoZSBwcm92aWRlZCBtYXAgd2l0aCB0aGUgZGVmYXVsdCBvbmVcbiAgICogQHBhcmFtIF9tZXNzYWdlSGFuZGxlcnNcbiAgICovXG4gIG92ZXJyaWRlTWVzc2FnZUhhbmRsZXJzPFQ+KF9tZXNzYWdlSGFuZGxlcnM6IE1hcDxzdHJpbmcsIE1lc3NhZ2VIYW5kbGVyPFQ+Pik6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLm92ZXJyaWRlTWVzc2FnZUhhbmRsZXJzKF9tZXNzYWdlSGFuZGxlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIHNwZWNpZmljIGV2ZW50LlxuICAgKiBJZiBhIGxpc3RlbmVyIGZvciB0aGlzIHNhbWUgZXZlbnQgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi5cbiAgICogSWYgdGhlIGxpc3RlbmVyIGhhcyBcImlzR2xvYmFsSGFuZGxlclwiIHNldCB0byB0cnVlLCBpdCB3aWxsIGJlIHJlZ2lzdGVyZWQgdG8gdGhlIGh1YiBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0gZXZlbnROYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIHJlZ2lzdGVyIGEgbGlzdGVuZXIgZm9yXG4gICAqIEBwYXJhbSBldmVudEhhbmRsZXIgVGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIHJlY2VpdmVkXG4gICAqL1xuICBhZGRNZXNzYWdlSGFuZGxlcjxUPihldmVudE5hbWU6IHN0cmluZywgZXZlbnRIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcjxUPik6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLmFkZE1lc3NhZ2VIYW5kbGVyKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBsaXN0ZW5lciBmb3IgYSBzcGVjaWZpYyBldmVudCBmcm9tIHRoZSBfbWVzc2FnZUhhbmRsZXJzIG1hcCBhbmQgdW5zdWJzY3JpYmUgZnJvbSByZWNlaXZpbmcgbWVzc2FnZXMgZm9yIHRoaXMgZXZlbnQgZnJvbSB0aGUgU2lnbmFsUiBodWIuXG4gICAqIEBwYXJhbSBldmVudE5hbWUgTmFtZSBvZiB0aGUgZXZlbnQgdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lciBmb3JcbiAgICovXG4gIHJlbW92ZU1lc3NhZ2VIYW5kbGVyKGV2ZW50TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UucmVtb3ZlTWVzc2FnZUhhbmRsZXIoZXZlbnROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbm5lY3Rpb24gdG8gdGhlIHNpZ25hbFIgd2Vic29ja2V0IGFuZCByZWdpc3RlciBkZWZhdWx0IGxpc3RlbmVycyB0byB0aGUgbWV0aG9kcyBkZWZpbmVkIGluIHRoZSBzZXJ2ZXIgaHViIGNsYXNzXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgY29ubmVjdGlvbi4gSXQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IG9wdGlvbnNcbiAgICogQHBhcmFtIGxvZ0xldmVsIERlZmluZSB0aGUgbG9nIGxldmVsIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBidWlsdFxuICAgKi9cbiAgYnVpbGRDb25uZWN0aW9uKG9wdGlvbnM/OiBDb25uZWN0aW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNpZ25hbFJDb25uZWN0aW9uU2VydmljZS5idWlsZENvbm5lY3Rpb24ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIGNvbm5lY3Rpb25cbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgc3RhcnRlZFxuICAgKi9cbiAgc3RhcnRDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNpZ25hbFJDb25uZWN0aW9uU2VydmljZS5zdGFydENvbm5lY3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRoZSBjb25uZWN0aW9uXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHN0b3BwZWRcbiAgICovXG4gIHN0b3BDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNpZ25hbFJDb25uZWN0aW9uU2VydmljZS5zdG9wQ29ubmVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGFuIGF1ZGl0IGV2ZW50IHdpdGggdGhlIGdpdmVuIHR5cGUgYW5kIGRldGFpbHMuIFRoZSBnZW5lcmF0ZWQgYXVkaXQgZXZlbnQgaXMgc2VudCBhZnRlcndhcmRzIHZpYSB0aGUgQXVkaXRXZWJTZXJ2aWNlXG4gICAqIEBwYXJhbSB0eXBlIEF1ZGl0IGV2ZW50IHR5cGVcbiAgICogQHBhcmFtIGRldGFpbHMgQXVkaXQgZXZlbnQgZGV0YWlsc1xuICAgKiBAcGFyYW0gaWQgQWN0aW9ucyAoc2F2ZWRDaGF0IGRlbGV0ZS9yZW5hbWUvLi4uKSBtYXkgb2NjdXIgb24gYSBzcGVjaWZpYyBjaGF0IGRpZmZlcmVudCB0aGFuIHRoZSBjdXJyZW50IG9uZSBzdG9yZWQgaW4gdGhpcyBzZXJ2aWNlLCBzbyB0aGUgY2hhdCBpZCBjYW4gYmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlQXVkaXRFdmVudCh0eXBlOiBzdHJpbmcsIGRldGFpbHM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGlkPzogc3RyaW5nKSB7XG4gICAgY29uc3QgYmFzZURldGFpbHMgPSB7XG4gICAgICBcInVybFwiOiBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmxvY2F0aW9uLmhyZWYpLFxuICAgICAgXCJhcHBcIjogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWUsXG4gICAgICBcInVzZXItaWRcIjogdGhpcy5wcmluY2lwYWxTZXJ2aWNlLnByaW5jaXBhbD8udXNlcklkLFxuICAgICAgXCJpbnN0YW5jZS1pZFwiOiB0aGlzLmNoYXRJbnN0YW5jZUlkLFxuICAgICAgXCJjaGF0LWlkXCI6IGlkIHx8IHRoaXMuY2hhdElkLFxuICAgICAgXCJzZXJ2aWNlLWlkXCI6IHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5zZXJ2aWNlX2lkLFxuICAgICAgXCJtb2RlbC1pZFwiOiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmRlZmF1bHRWYWx1ZXMubW9kZWxfaWRcbiAgICB9O1xuXG4gICAgaWYgKHR5cGUgPT09IFwiYXN0LW1lc3NhZ2UubWVzc2FnZVwiKSB7XG4gICAgICBiYXNlRGV0YWlsc1tcImlzLXVzZXItaW5wdXRcIl0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBhdWRpdCA9IHtcbiAgICAgIHR5cGUsXG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgLi4uYmFzZURldGFpbHMsXG4gICAgICAgIC4uLmRldGFpbHNcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgQXVkaXQubm90aWZ5KGF1ZGl0KTtcbiAgfVxuXG59XG4iXX0=