@aerokit/sdk 12.44.0

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 (399) hide show
  1. package/LICENSE +277 -0
  2. package/README.md +170 -0
  3. package/dist/cjs/bpm/deployer.js +57 -0
  4. package/dist/cjs/bpm/index.js +35 -0
  5. package/dist/cjs/bpm/process.js +636 -0
  6. package/dist/cjs/bpm/tasks.js +973 -0
  7. package/dist/cjs/bpm/values.js +82 -0
  8. package/dist/cjs/cache/cache.js +64 -0
  9. package/dist/cjs/cache/index.js +26 -0
  10. package/dist/cjs/cms/cmis.js +689 -0
  11. package/dist/cjs/cms/index.js +26 -0
  12. package/dist/cjs/component/decorators.js +126 -0
  13. package/dist/cjs/component/index.js +36 -0
  14. package/dist/cjs/core/configurations.js +110 -0
  15. package/dist/cjs/core/context.js +47 -0
  16. package/dist/cjs/core/env.js +45 -0
  17. package/dist/cjs/core/globals.js +54 -0
  18. package/dist/cjs/core/index.js +35 -0
  19. package/dist/cjs/db/dao.js +795 -0
  20. package/dist/cjs/db/database.js +904 -0
  21. package/dist/cjs/db/decorators.js +167 -0
  22. package/dist/cjs/db/index.js +72 -0
  23. package/dist/cjs/db/insert.js +51 -0
  24. package/dist/cjs/db/orm.js +245 -0
  25. package/dist/cjs/db/ormstatements.js +243 -0
  26. package/dist/cjs/db/procedure.js +112 -0
  27. package/dist/cjs/db/query.js +57 -0
  28. package/dist/cjs/db/repository.js +148 -0
  29. package/dist/cjs/db/sequence.js +59 -0
  30. package/dist/cjs/db/sql.js +516 -0
  31. package/dist/cjs/db/store.js +172 -0
  32. package/dist/cjs/db/translator.js +100 -0
  33. package/dist/cjs/db/update.js +43 -0
  34. package/dist/cjs/etcd/client.js +174 -0
  35. package/dist/cjs/etcd/index.js +26 -0
  36. package/dist/cjs/extensions/decorators.js +40 -0
  37. package/dist/cjs/extensions/extensions.js +108 -0
  38. package/dist/cjs/extensions/index.js +39 -0
  39. package/dist/cjs/git/client.js +277 -0
  40. package/dist/cjs/git/index.js +26 -0
  41. package/dist/cjs/http/client-async.js +224 -0
  42. package/dist/cjs/http/client.js +145 -0
  43. package/dist/cjs/http/decorators.js +76 -0
  44. package/dist/cjs/http/errors/ForbiddenError.js +41 -0
  45. package/dist/cjs/http/errors/ValidationError.js +41 -0
  46. package/dist/cjs/http/errors.js +26 -0
  47. package/dist/cjs/http/index.js +59 -0
  48. package/dist/cjs/http/request.js +281 -0
  49. package/dist/cjs/http/response.js +452 -0
  50. package/dist/cjs/http/rs/resource-common.js +32 -0
  51. package/dist/cjs/http/rs/resource-http-controller.js +306 -0
  52. package/dist/cjs/http/rs/resource-mappings.js +130 -0
  53. package/dist/cjs/http/rs/resource-method.js +218 -0
  54. package/dist/cjs/http/rs/resource.js +232 -0
  55. package/dist/cjs/http/rs.js +31 -0
  56. package/dist/cjs/http/session.js +124 -0
  57. package/dist/cjs/http/upload.js +144 -0
  58. package/dist/cjs/http/utils.js +106 -0
  59. package/dist/cjs/index.js +1 -0
  60. package/dist/cjs/indexing/index.js +29 -0
  61. package/dist/cjs/indexing/searcher.js +70 -0
  62. package/dist/cjs/indexing/writer.js +45 -0
  63. package/dist/cjs/integrations/index.js +26 -0
  64. package/dist/cjs/integrations/integrations.js +55 -0
  65. package/dist/cjs/io/bytes.js +101 -0
  66. package/dist/cjs/io/files.js +344 -0
  67. package/dist/cjs/io/image.js +43 -0
  68. package/dist/cjs/io/index.js +38 -0
  69. package/dist/cjs/io/streams.js +243 -0
  70. package/dist/cjs/io/zip.js +251 -0
  71. package/dist/cjs/job/decorators.js +40 -0
  72. package/dist/cjs/job/index.js +39 -0
  73. package/dist/cjs/job/scheduler.js +347 -0
  74. package/dist/cjs/junit/index.js +18 -0
  75. package/dist/cjs/junit/junit.js +67 -0
  76. package/dist/cjs/kafka/consumer.js +70 -0
  77. package/dist/cjs/kafka/index.js +29 -0
  78. package/dist/cjs/kafka/producer.js +70 -0
  79. package/dist/cjs/log/index.js +26 -0
  80. package/dist/cjs/log/logging.js +174 -0
  81. package/dist/cjs/mail/client.js +153 -0
  82. package/dist/cjs/mail/index.js +26 -0
  83. package/dist/cjs/messaging/consumer.js +83 -0
  84. package/dist/cjs/messaging/decorators.js +40 -0
  85. package/dist/cjs/messaging/index.js +42 -0
  86. package/dist/cjs/messaging/producer.js +81 -0
  87. package/dist/cjs/mongodb/client.js +627 -0
  88. package/dist/cjs/mongodb/dao.js +390 -0
  89. package/dist/cjs/mongodb/index.js +36 -0
  90. package/dist/cjs/net/decorators.js +40 -0
  91. package/dist/cjs/net/index.js +42 -0
  92. package/dist/cjs/net/soap.js +228 -0
  93. package/dist/cjs/net/websockets.js +151 -0
  94. package/dist/cjs/net/wrappers/onClose.js +2 -0
  95. package/dist/cjs/net/wrappers/onError.js +2 -0
  96. package/dist/cjs/net/wrappers/onMessage.js +2 -0
  97. package/dist/cjs/net/wrappers/onOpen.js +2 -0
  98. package/dist/cjs/pdf/index.js +26 -0
  99. package/dist/cjs/pdf/pdf.js +160 -0
  100. package/dist/cjs/platform/command.js +47 -0
  101. package/dist/cjs/platform/engines.js +70 -0
  102. package/dist/cjs/platform/index.js +47 -0
  103. package/dist/cjs/platform/lifecycle.js +49 -0
  104. package/dist/cjs/platform/os.js +51 -0
  105. package/dist/cjs/platform/problems.js +127 -0
  106. package/dist/cjs/platform/registry.js +319 -0
  107. package/dist/cjs/platform/repository.js +498 -0
  108. package/dist/cjs/platform/workspace.js +574 -0
  109. package/dist/cjs/qldb/index.js +26 -0
  110. package/dist/cjs/qldb/qldb.js +24 -0
  111. package/dist/cjs/rabbitmq/consumer.js +50 -0
  112. package/dist/cjs/rabbitmq/index.js +29 -0
  113. package/dist/cjs/rabbitmq/producer.js +38 -0
  114. package/dist/cjs/redis/client.js +190 -0
  115. package/dist/cjs/redis/index.js +26 -0
  116. package/dist/cjs/security/decorators.js +48 -0
  117. package/dist/cjs/security/index.js +40 -0
  118. package/dist/cjs/security/oauth.js +75 -0
  119. package/dist/cjs/security/user.js +88 -0
  120. package/dist/cjs/template/engines.js +139 -0
  121. package/dist/cjs/template/index.js +26 -0
  122. package/dist/cjs/utils/alphanumeric.js +107 -0
  123. package/dist/cjs/utils/base64.js +104 -0
  124. package/dist/cjs/utils/converter.js +78 -0
  125. package/dist/cjs/utils/digest.js +167 -0
  126. package/dist/cjs/utils/escape.js +160 -0
  127. package/dist/cjs/utils/hex.js +104 -0
  128. package/dist/cjs/utils/index.js +68 -0
  129. package/dist/cjs/utils/jsonpath.js +489 -0
  130. package/dist/cjs/utils/qrcode.js +41 -0
  131. package/dist/cjs/utils/url.js +82 -0
  132. package/dist/cjs/utils/utf8.js +61 -0
  133. package/dist/cjs/utils/uuid.js +48 -0
  134. package/dist/cjs/utils/xml.js +57 -0
  135. package/dist/dts/bpm/deployer.d.ts +29 -0
  136. package/dist/dts/bpm/index.d.ts +8 -0
  137. package/dist/dts/bpm/process.d.ts +433 -0
  138. package/dist/dts/bpm/tasks.d.ts +2022 -0
  139. package/dist/dts/bpm/values.d.ts +38 -0
  140. package/dist/dts/cache/cache.d.ts +30 -0
  141. package/dist/dts/cache/index.d.ts +2 -0
  142. package/dist/dts/cms/cmis.d.ts +413 -0
  143. package/dist/dts/cms/index.d.ts +2 -0
  144. package/dist/dts/component/decorators.d.ts +52 -0
  145. package/dist/dts/component/index.d.ts +2 -0
  146. package/dist/dts/core/configurations.d.ts +65 -0
  147. package/dist/dts/core/context.d.ts +19 -0
  148. package/dist/dts/core/env.d.ts +23 -0
  149. package/dist/dts/core/globals.d.ts +30 -0
  150. package/dist/dts/core/index.d.ts +8 -0
  151. package/dist/dts/db/dao.d.ts +8 -0
  152. package/dist/dts/db/database.d.ts +507 -0
  153. package/dist/dts/db/decorators.d.ts +89 -0
  154. package/dist/dts/db/index.d.ts +25 -0
  155. package/dist/dts/db/insert.d.ts +32 -0
  156. package/dist/dts/db/orm.d.ts +44 -0
  157. package/dist/dts/db/ormstatements.d.ts +4 -0
  158. package/dist/dts/db/procedure.d.ts +25 -0
  159. package/dist/dts/db/query.d.ts +48 -0
  160. package/dist/dts/db/repository.d.ts +64 -0
  161. package/dist/dts/db/sequence.d.ts +34 -0
  162. package/dist/dts/db/sql.d.ts +267 -0
  163. package/dist/dts/db/store.d.ts +138 -0
  164. package/dist/dts/db/translator.d.ts +26 -0
  165. package/dist/dts/db/update.d.ts +21 -0
  166. package/dist/dts/etcd/client.d.ts +92 -0
  167. package/dist/dts/etcd/index.d.ts +2 -0
  168. package/dist/dts/extensions/decorators.d.ts +11 -0
  169. package/dist/dts/extensions/extensions.d.ts +41 -0
  170. package/dist/dts/extensions/index.d.ts +4 -0
  171. package/dist/dts/git/client.d.ts +478 -0
  172. package/dist/dts/git/index.d.ts +2 -0
  173. package/dist/dts/http/client-async.d.ts +158 -0
  174. package/dist/dts/http/client.d.ts +180 -0
  175. package/dist/dts/http/decorators.d.ts +11 -0
  176. package/dist/dts/http/errors/ForbiddenError.d.ts +20 -0
  177. package/dist/dts/http/errors/ValidationError.d.ts +20 -0
  178. package/dist/dts/http/errors.d.ts +2 -0
  179. package/dist/dts/http/index.d.ts +16 -0
  180. package/dist/dts/http/request.d.ts +158 -0
  181. package/dist/dts/http/response.d.ts +281 -0
  182. package/dist/dts/http/rs/resource-common.d.ts +11 -0
  183. package/dist/dts/http/rs/resource-http-controller.d.ts +43 -0
  184. package/dist/dts/http/rs/resource-mappings.d.ts +70 -0
  185. package/dist/dts/http/rs/resource-method.d.ts +206 -0
  186. package/dist/dts/http/rs/resource.d.ts +126 -0
  187. package/dist/dts/http/rs.d.ts +4 -0
  188. package/dist/dts/http/session.d.ts +81 -0
  189. package/dist/dts/http/upload.d.ts +100 -0
  190. package/dist/dts/http/utils.d.ts +54 -0
  191. package/dist/dts/index.d.ts +0 -0
  192. package/dist/dts/indexing/index.d.ts +4 -0
  193. package/dist/dts/indexing/searcher.d.ts +47 -0
  194. package/dist/dts/indexing/writer.d.ts +22 -0
  195. package/dist/dts/integrations/index.d.ts +2 -0
  196. package/dist/dts/integrations/integrations.d.ts +118 -0
  197. package/dist/dts/io/bytes.d.ts +56 -0
  198. package/dist/dts/io/files.d.ts +261 -0
  199. package/dist/dts/io/image.d.ts +22 -0
  200. package/dist/dts/io/index.d.ts +10 -0
  201. package/dist/dts/io/streams.d.ts +172 -0
  202. package/dist/dts/io/zip.d.ts +178 -0
  203. package/dist/dts/job/decorators.d.ts +11 -0
  204. package/dist/dts/job/index.d.ts +4 -0
  205. package/dist/dts/job/scheduler.d.ts +250 -0
  206. package/dist/dts/junit/index.d.ts +1 -0
  207. package/dist/dts/junit/junit.d.ts +50 -0
  208. package/dist/dts/kafka/consumer.d.ts +48 -0
  209. package/dist/dts/kafka/index.d.ts +4 -0
  210. package/dist/dts/kafka/producer.d.ts +50 -0
  211. package/dist/dts/log/index.d.ts +2 -0
  212. package/dist/dts/log/logging.d.ts +102 -0
  213. package/dist/dts/mail/client.d.ts +90 -0
  214. package/dist/dts/mail/index.d.ts +2 -0
  215. package/dist/dts/messaging/consumer.d.ts +61 -0
  216. package/dist/dts/messaging/decorators.d.ts +11 -0
  217. package/dist/dts/messaging/index.d.ts +6 -0
  218. package/dist/dts/messaging/producer.d.ts +59 -0
  219. package/dist/dts/mongodb/client.d.ts +367 -0
  220. package/dist/dts/mongodb/dao.d.ts +24 -0
  221. package/dist/dts/mongodb/index.d.ts +2 -0
  222. package/dist/dts/net/decorators.d.ts +11 -0
  223. package/dist/dts/net/index.d.ts +6 -0
  224. package/dist/dts/net/soap.d.ts +115 -0
  225. package/dist/dts/net/websockets.d.ts +100 -0
  226. package/dist/dts/net/wrappers/onClose.d.ts +0 -0
  227. package/dist/dts/net/wrappers/onError.d.ts +0 -0
  228. package/dist/dts/net/wrappers/onMessage.d.ts +0 -0
  229. package/dist/dts/net/wrappers/onOpen.d.ts +0 -0
  230. package/dist/dts/pdf/index.d.ts +2 -0
  231. package/dist/dts/pdf/pdf.d.ts +72 -0
  232. package/dist/dts/platform/command.d.ts +41 -0
  233. package/dist/dts/platform/engines.d.ts +35 -0
  234. package/dist/dts/platform/index.d.ts +16 -0
  235. package/dist/dts/platform/lifecycle.d.ts +22 -0
  236. package/dist/dts/platform/os.d.ts +23 -0
  237. package/dist/dts/platform/problems.d.ts +114 -0
  238. package/dist/dts/platform/registry.d.ts +227 -0
  239. package/dist/dts/platform/repository.d.ts +354 -0
  240. package/dist/dts/platform/workspace.d.ts +421 -0
  241. package/dist/dts/qldb/index.d.ts +2 -0
  242. package/dist/dts/qldb/qldb.d.ts +1 -0
  243. package/dist/dts/rabbitmq/consumer.d.ts +25 -0
  244. package/dist/dts/rabbitmq/index.d.ts +4 -0
  245. package/dist/dts/rabbitmq/producer.d.ts +15 -0
  246. package/dist/dts/redis/client.d.ts +134 -0
  247. package/dist/dts/redis/index.d.ts +2 -0
  248. package/dist/dts/security/decorators.d.ts +4 -0
  249. package/dist/dts/security/index.d.ts +5 -0
  250. package/dist/dts/security/oauth.d.ts +39 -0
  251. package/dist/dts/security/user.d.ts +51 -0
  252. package/dist/dts/template/engines.d.ts +98 -0
  253. package/dist/dts/template/index.d.ts +2 -0
  254. package/dist/dts/utils/alphanumeric.d.ts +39 -0
  255. package/dist/dts/utils/base64.d.ts +48 -0
  256. package/dist/dts/utils/converter.d.ts +44 -0
  257. package/dist/dts/utils/digest.d.ts +50 -0
  258. package/dist/dts/utils/escape.d.ts +110 -0
  259. package/dist/dts/utils/hex.d.ts +48 -0
  260. package/dist/dts/utils/index.d.ts +23 -0
  261. package/dist/dts/utils/jsonpath.d.ts +22 -0
  262. package/dist/dts/utils/qrcode.d.ts +16 -0
  263. package/dist/dts/utils/url.d.ts +50 -0
  264. package/dist/dts/utils/utf8.d.ts +33 -0
  265. package/dist/dts/utils/uuid.d.ts +21 -0
  266. package/dist/dts/utils/xml.d.ts +22 -0
  267. package/dist/esm/bpm/deployer.mjs +38 -0
  268. package/dist/esm/bpm/index.mjs +15 -0
  269. package/dist/esm/bpm/process.mjs +617 -0
  270. package/dist/esm/bpm/tasks.mjs +954 -0
  271. package/dist/esm/bpm/values.mjs +63 -0
  272. package/dist/esm/cache/cache.mjs +45 -0
  273. package/dist/esm/cache/index.mjs +6 -0
  274. package/dist/esm/cms/cmis.mjs +660 -0
  275. package/dist/esm/cms/index.mjs +6 -0
  276. package/dist/esm/component/decorators.mjs +107 -0
  277. package/dist/esm/component/index.mjs +6 -0
  278. package/dist/esm/core/configurations.mjs +91 -0
  279. package/dist/esm/core/context.mjs +28 -0
  280. package/dist/esm/core/env.mjs +26 -0
  281. package/dist/esm/core/globals.mjs +35 -0
  282. package/dist/esm/core/index.mjs +15 -0
  283. package/dist/esm/db/dao.mjs +775 -0
  284. package/dist/esm/db/database.mjs +885 -0
  285. package/dist/esm/db/decorators.mjs +148 -0
  286. package/dist/esm/db/index.mjs +42 -0
  287. package/dist/esm/db/insert.mjs +32 -0
  288. package/dist/esm/db/orm.mjs +225 -0
  289. package/dist/esm/db/ormstatements.mjs +223 -0
  290. package/dist/esm/db/procedure.mjs +93 -0
  291. package/dist/esm/db/query.mjs +38 -0
  292. package/dist/esm/db/repository.mjs +129 -0
  293. package/dist/esm/db/sequence.mjs +40 -0
  294. package/dist/esm/db/sql.mjs +497 -0
  295. package/dist/esm/db/store.mjs +153 -0
  296. package/dist/esm/db/translator.mjs +81 -0
  297. package/dist/esm/db/update.mjs +24 -0
  298. package/dist/esm/etcd/client.mjs +155 -0
  299. package/dist/esm/etcd/index.mjs +6 -0
  300. package/dist/esm/extensions/decorators.mjs +21 -0
  301. package/dist/esm/extensions/extensions.mjs +89 -0
  302. package/dist/esm/extensions/index.mjs +9 -0
  303. package/dist/esm/git/client.mjs +258 -0
  304. package/dist/esm/git/index.mjs +6 -0
  305. package/dist/esm/http/client-async.mjs +205 -0
  306. package/dist/esm/http/client.mjs +126 -0
  307. package/dist/esm/http/decorators.mjs +47 -0
  308. package/dist/esm/http/errors/ForbiddenError.mjs +22 -0
  309. package/dist/esm/http/errors/ValidationError.mjs +22 -0
  310. package/dist/esm/http/errors.mjs +7 -0
  311. package/dist/esm/http/index.mjs +29 -0
  312. package/dist/esm/http/request.mjs +262 -0
  313. package/dist/esm/http/response.mjs +433 -0
  314. package/dist/esm/http/rs/resource-common.mjs +13 -0
  315. package/dist/esm/http/rs/resource-http-controller.mjs +287 -0
  316. package/dist/esm/http/rs/resource-mappings.mjs +111 -0
  317. package/dist/esm/http/rs/resource-method.mjs +199 -0
  318. package/dist/esm/http/rs/resource.mjs +213 -0
  319. package/dist/esm/http/rs.mjs +12 -0
  320. package/dist/esm/http/session.mjs +105 -0
  321. package/dist/esm/http/upload.mjs +125 -0
  322. package/dist/esm/http/utils.mjs +87 -0
  323. package/dist/esm/index.mjs +1 -0
  324. package/dist/esm/indexing/index.mjs +9 -0
  325. package/dist/esm/indexing/searcher.mjs +51 -0
  326. package/dist/esm/indexing/writer.mjs +26 -0
  327. package/dist/esm/integrations/index.mjs +6 -0
  328. package/dist/esm/integrations/integrations.mjs +36 -0
  329. package/dist/esm/io/bytes.mjs +82 -0
  330. package/dist/esm/io/files.mjs +325 -0
  331. package/dist/esm/io/image.mjs +24 -0
  332. package/dist/esm/io/index.mjs +18 -0
  333. package/dist/esm/io/streams.mjs +224 -0
  334. package/dist/esm/io/zip.mjs +232 -0
  335. package/dist/esm/job/decorators.mjs +21 -0
  336. package/dist/esm/job/index.mjs +9 -0
  337. package/dist/esm/job/scheduler.mjs +328 -0
  338. package/dist/esm/junit/index.mjs +2 -0
  339. package/dist/esm/junit/junit.mjs +48 -0
  340. package/dist/esm/kafka/consumer.mjs +51 -0
  341. package/dist/esm/kafka/index.mjs +9 -0
  342. package/dist/esm/kafka/producer.mjs +51 -0
  343. package/dist/esm/log/index.mjs +6 -0
  344. package/dist/esm/log/logging.mjs +155 -0
  345. package/dist/esm/mail/client.mjs +134 -0
  346. package/dist/esm/mail/index.mjs +6 -0
  347. package/dist/esm/messaging/consumer.mjs +64 -0
  348. package/dist/esm/messaging/decorators.mjs +21 -0
  349. package/dist/esm/messaging/index.mjs +12 -0
  350. package/dist/esm/messaging/producer.mjs +62 -0
  351. package/dist/esm/mongodb/client.mjs +608 -0
  352. package/dist/esm/mongodb/dao.mjs +360 -0
  353. package/dist/esm/mongodb/index.mjs +7 -0
  354. package/dist/esm/net/decorators.mjs +21 -0
  355. package/dist/esm/net/index.mjs +12 -0
  356. package/dist/esm/net/soap.mjs +209 -0
  357. package/dist/esm/net/websockets.mjs +132 -0
  358. package/dist/esm/net/wrappers/onClose.mjs +2 -0
  359. package/dist/esm/net/wrappers/onError.mjs +2 -0
  360. package/dist/esm/net/wrappers/onMessage.mjs +2 -0
  361. package/dist/esm/net/wrappers/onOpen.mjs +2 -0
  362. package/dist/esm/pdf/index.mjs +6 -0
  363. package/dist/esm/pdf/pdf.mjs +141 -0
  364. package/dist/esm/platform/command.mjs +28 -0
  365. package/dist/esm/platform/engines.mjs +51 -0
  366. package/dist/esm/platform/index.mjs +27 -0
  367. package/dist/esm/platform/lifecycle.mjs +30 -0
  368. package/dist/esm/platform/os.mjs +32 -0
  369. package/dist/esm/platform/problems.mjs +108 -0
  370. package/dist/esm/platform/registry.mjs +300 -0
  371. package/dist/esm/platform/repository.mjs +479 -0
  372. package/dist/esm/platform/workspace.mjs +555 -0
  373. package/dist/esm/qldb/index.mjs +6 -0
  374. package/dist/esm/qldb/qldb.mjs +5 -0
  375. package/dist/esm/rabbitmq/consumer.mjs +31 -0
  376. package/dist/esm/rabbitmq/index.mjs +9 -0
  377. package/dist/esm/rabbitmq/producer.mjs +19 -0
  378. package/dist/esm/redis/client.mjs +171 -0
  379. package/dist/esm/redis/index.mjs +6 -0
  380. package/dist/esm/security/decorators.mjs +29 -0
  381. package/dist/esm/security/index.mjs +10 -0
  382. package/dist/esm/security/oauth.mjs +56 -0
  383. package/dist/esm/security/user.mjs +69 -0
  384. package/dist/esm/template/engines.mjs +120 -0
  385. package/dist/esm/template/index.mjs +6 -0
  386. package/dist/esm/utils/alphanumeric.mjs +88 -0
  387. package/dist/esm/utils/base64.mjs +85 -0
  388. package/dist/esm/utils/converter.mjs +59 -0
  389. package/dist/esm/utils/digest.mjs +148 -0
  390. package/dist/esm/utils/escape.mjs +141 -0
  391. package/dist/esm/utils/hex.mjs +85 -0
  392. package/dist/esm/utils/index.mjs +38 -0
  393. package/dist/esm/utils/jsonpath.mjs +470 -0
  394. package/dist/esm/utils/qrcode.mjs +22 -0
  395. package/dist/esm/utils/url.mjs +63 -0
  396. package/dist/esm/utils/utf8.mjs +42 -0
  397. package/dist/esm/utils/uuid.mjs +29 -0
  398. package/dist/esm/utils/xml.mjs +38 -0
  399. package/package.json +58 -0
@@ -0,0 +1,258 @@
1
+ const GitFacade = Java.type("org.eclipse.dirigible.components.api.git.GitFacade");
2
+ class Client {
3
+ /**
4
+ * Initializes a new Git repository for a project, performs an initial commit, and pushes.
5
+ *
6
+ * @param user The username of the committer.
7
+ * @param email The email address of the committer.
8
+ * @param workspaceName The name of the workspace.
9
+ * @param projectName The name of the project.
10
+ * @param repositoryName The name of the repository (where to put the git folder).
11
+ * @param commitMessage The initial commit message.
12
+ */
13
+ static initRepository(user, email, workspaceName, projectName, repositoryName, commitMessage) {
14
+ GitFacade.initRepository(user, email, workspaceName, projectName, repositoryName, commitMessage);
15
+ }
16
+ /**
17
+ * Performs a commit in the specified repository.
18
+ *
19
+ * @param user The username of the committer.
20
+ * @param email The email address of the committer.
21
+ * @param workspaceName The name of the workspace.
22
+ * @param repositoryName The name of the repository.
23
+ * @param commitMessage The commit message.
24
+ * @param all If true, automatically stages modified and deleted files before committing.
25
+ */
26
+ static commit(user, email, workspaceName, repositoryName, commitMessage, all) {
27
+ GitFacade.commit(user, email, workspaceName, repositoryName, commitMessage, all);
28
+ }
29
+ /**
30
+ * Retrieves a list of all Git repositories (projects) within the specified workspace.
31
+ *
32
+ * @param workspaceName The name of the workspace.
33
+ * @returns An array of {@link ProjectDescriptor} objects.
34
+ */
35
+ static getGitRepositories(workspaceName) {
36
+ return GitFacade.getGitRepositories(workspaceName);
37
+ }
38
+ /**
39
+ * Retrieves the commit history for the specified repository or a specific file path within it.
40
+ *
41
+ * @param repositoryName The name of the repository.
42
+ * @param workspaceName The name of the workspace.
43
+ * @param path The file path for history, or null/empty string for full repository history.
44
+ * @returns An array of {@link GitCommitInfo} objects.
45
+ */
46
+ static getHistory(repositoryName, workspaceName, path) {
47
+ return GitFacade.getHistory(repositoryName, workspaceName, path);
48
+ }
49
+ /**
50
+ * Deletes the specified Git repository.
51
+ *
52
+ * @param workspaceName The name of the workspace.
53
+ * @param repositoryName The name of the repository to delete.
54
+ */
55
+ static deleteRepository(workspaceName, repositoryName) {
56
+ return GitFacade.deleteRepository(workspaceName, repositoryName);
57
+ }
58
+ /**
59
+ * Clones a remote repository into the local workspace.
60
+ *
61
+ * @param workspaceName The name of the workspace.
62
+ * @param repositoryUri The URI of the remote repository.
63
+ * @param username The username for authentication.
64
+ * @param password The password for authentication.
65
+ * @param branch The specific branch to checkout after cloning.
66
+ * @returns A GitConnector instance for interacting directly with the cloned repository.
67
+ */
68
+ static cloneRepository(workspaceName, repositoryUri, username, password, branch) {
69
+ return GitFacade.cloneRepository(workspaceName, repositoryUri, username, password, branch);
70
+ }
71
+ /**
72
+ * Pulls changes from the remote repository and attempts to merge them into the current branch.
73
+ *
74
+ * @param workspaceName The name of the workspace.
75
+ * @param repositoryName The name of the repository.
76
+ * @param username The username for authentication.
77
+ * @param password The password for authentication.
78
+ */
79
+ static pull(workspaceName, repositoryName, username, password) {
80
+ GitFacade.pull(workspaceName, repositoryName, username, password);
81
+ }
82
+ /**
83
+ * Pushes the local commits to the remote repository.
84
+ *
85
+ * @param workspaceName The name of the workspace.
86
+ * @param repositoryName The name of the repository.
87
+ * @param username The username for authentication.
88
+ * @param password The password for authentication.
89
+ */
90
+ static push(workspaceName, repositoryName, username, password) {
91
+ GitFacade.push(workspaceName, repositoryName, username, password);
92
+ }
93
+ /**
94
+ * Checks out a specific branch, commit, or tag in the repository.
95
+ *
96
+ * @param workspaceName The name of the workspace.
97
+ * @param repositoryName The name of the repository.
98
+ * @param branch The branch or tree-ish object to check out.
99
+ */
100
+ static checkout(workspaceName, repositoryName, branch) {
101
+ GitFacade.checkout(workspaceName, repositoryName, branch);
102
+ }
103
+ /**
104
+ * Creates a new branch starting from a specified point (e.g., HEAD, a commit hash, or another branch).
105
+ *
106
+ * @param workspaceName The name of the workspace.
107
+ * @param repositoryName The name of the repository.
108
+ * @param branch The name of the new branch to create.
109
+ * @param startingPoint The tree-ish object to start the new branch from.
110
+ */
111
+ static createBranch(workspaceName, repositoryName, branch, startingPoint) {
112
+ GitFacade.createBranch(workspaceName, repositoryName, branch, startingPoint);
113
+ }
114
+ /**
115
+ * Deletes a local branch.
116
+ *
117
+ * @param workspaceName The name of the workspace.
118
+ * @param repositoryName The name of the repository.
119
+ * @param branch The name of the branch to delete.
120
+ */
121
+ static deleteBranch(workspaceName, repositoryName, branch) {
122
+ GitFacade.deleteBranch(workspaceName, repositoryName, branch);
123
+ }
124
+ /**
125
+ * Renames a local branch.
126
+ *
127
+ * @param workspaceName The name of the workspace.
128
+ * @param repositoryName The name of the repository.
129
+ * @param oldName The current name of the branch.
130
+ * @param newName The new name for the branch.
131
+ */
132
+ static renameBranch(workspaceName, repositoryName, oldName, newName) {
133
+ GitFacade.renameBranch(workspaceName, repositoryName, oldName, newName);
134
+ }
135
+ /**
136
+ * Creates a new remote branch on the Git server.
137
+ *
138
+ * @param workspaceName The name of the workspace.
139
+ * @param repositoryName The name of the repository.
140
+ * @param branch The name of the remote branch to create.
141
+ * @param startingPoint The tree-ish object to start the new remote branch from.
142
+ * @param username The username for authentication.
143
+ * @param password The password for authentication.
144
+ */
145
+ static createRemoteBranch(workspaceName, repositoryName, branch, startingPoint, username, password) {
146
+ GitFacade.createRemoteBranch(workspaceName, repositoryName, branch, startingPoint, username, password);
147
+ }
148
+ /**
149
+ * Deletes a remote branch on the Git server.
150
+ *
151
+ * @param workspaceName The name of the workspace.
152
+ * @param repositoryName The name of the repository.
153
+ * @param branch The name of the remote branch to delete.
154
+ * @param username The username for authentication.
155
+ * @param password The password for authentication.
156
+ */
157
+ static deleteRemoteBranch(workspaceName, repositoryName, branch, username, password) {
158
+ GitFacade.deleteRemoteBranch(workspaceName, repositoryName, branch, username, password);
159
+ }
160
+ /**
161
+ * Resets the repository, discarding all uncommitted changes in the working directory and index.
162
+ *
163
+ * @param workspaceName The name of the workspace.
164
+ * @param repositoryName The name of the repository.
165
+ */
166
+ static hardReset(workspaceName, repositoryName) {
167
+ GitFacade.hardReset(workspaceName, repositoryName);
168
+ }
169
+ /**
170
+ * Reapplies commits from the specified branch onto the current branch.
171
+ *
172
+ * @param workspaceName The name of the workspace.
173
+ * @param repositoryName The name of the repository.
174
+ * @param branch The branch to rebase.
175
+ */
176
+ static rebase(workspaceName, repositoryName, branch) {
177
+ GitFacade.rebase(workspaceName, repositoryName, branch);
178
+ }
179
+ /**
180
+ * Retrieves the current status of the repository (staged, unstaged, untracked files).
181
+ *
182
+ * @param workspaceName The name of the workspace.
183
+ * @param repositoryName The name of the repository.
184
+ * @returns A string representation of the repository status.
185
+ */
186
+ static status(workspaceName, repositoryName) {
187
+ return GitFacade.status(workspaceName, repositoryName);
188
+ }
189
+ /**
190
+ * Retrieves the name of the currently active branch.
191
+ *
192
+ * @param workspaceName The name of the workspace.
193
+ * @param repositoryName The name of the repository.
194
+ * @returns The name of the current branch.
195
+ */
196
+ static getBranch(workspaceName, repositoryName) {
197
+ return GitFacade.getBranch(workspaceName, repositoryName);
198
+ }
199
+ /**
200
+ * Retrieves a list of all local branches in the repository.
201
+ *
202
+ * @param workspaceName The name of the workspace.
203
+ * @param repositoryName The name of the repository.
204
+ * @returns An array of {@link GitBranch} objects representing local branches.
205
+ */
206
+ static getLocalBranches(workspaceName, repositoryName) {
207
+ return GitFacade.getLocalBranches(workspaceName, repositoryName);
208
+ }
209
+ /**
210
+ * Retrieves a list of all remote branches configured for the repository.
211
+ *
212
+ * @param workspaceName The name of the workspace.
213
+ * @param repositoryName The name of the repository.
214
+ * @returns An array of {@link GitBranch} objects representing remote branches.
215
+ */
216
+ static getRemoteBranches(workspaceName, repositoryName) {
217
+ return GitFacade.getRemoteBranches(workspaceName, repositoryName);
218
+ }
219
+ /**
220
+ * Retrieves a list of all unstaged files (changes not yet added to the index).
221
+ *
222
+ * @param workspaceName The name of the workspace.
223
+ * @param repositoryName The name of the repository.
224
+ * @returns An array of {@link GitChangedFile} objects.
225
+ */
226
+ static getUnstagedChanges(workspaceName, repositoryName) {
227
+ return GitFacade.getUnstagedChanges(workspaceName, repositoryName);
228
+ }
229
+ /**
230
+ * Retrieves a list of all staged files (changes added to the index, ready for commit).
231
+ *
232
+ * @param workspaceName The name of the workspace.
233
+ * @param repositoryName The name of the repository.
234
+ * @returns An array of {@link GitChangedFile} objects.
235
+ */
236
+ static getStagedChanges(workspaceName, repositoryName) {
237
+ return GitFacade.getStagedChanges(workspaceName, repositoryName);
238
+ }
239
+ /**
240
+ * Retrieves the content of a file at a specific revision (commit, branch, or tag).
241
+ *
242
+ * @param workspaceName The name of the workspace.
243
+ * @param repositoryName The name of the repository.
244
+ * @param filePath The path to the file.
245
+ * @param revStr The revision string (e.g., commit hash or branch name).
246
+ * @returns The content of the file as a string.
247
+ */
248
+ static getFileContent(workspaceName, repositoryName, filePath, revStr) {
249
+ return GitFacade.getFileContent(workspaceName, repositoryName, filePath, revStr);
250
+ }
251
+ }
252
+ if (typeof module !== "undefined") {
253
+ module.exports = Client;
254
+ }
255
+ export {
256
+ Client
257
+ };
258
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2dpdC9jbGllbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IEdpdEZhY2FkZSA9IEphdmEudHlwZShcIm9yZy5lY2xpcHNlLmRpcmlnaWJsZS5jb21wb25lbnRzLmFwaS5naXQuR2l0RmFjYWRlXCIpO1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIGZpbGUgd2l0aGluIHRoZSB3b3Jrc3BhY2UsIHBvdGVudGlhbGx5IHdpdGggR2l0IHN0YXR1cyBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlRGVzY3JpcHRvciB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBjb250ZW50VHlwZTogc3RyaW5nO1xuICAgIHN0YXR1czogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyBhIGZvbGRlciB3aXRoaW4gdGhlIHdvcmtzcGFjZSwgcG90ZW50aWFsbHkgd2l0aCBHaXQgc3RhdHVzIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvbGRlckRlc2NyaXB0b3Ige1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgZm9sZGVyczogRm9sZGVyRGVzY3JpcHRvcltdO1xuICAgIGZpbGVzOiBGaWxlRGVzY3JpcHRvcltdO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyBhIEdpdC1tYW5hZ2VkIHByb2plY3QvcmVwb3NpdG9yeSBpbiB0aGUgd29ya3NwYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2plY3REZXNjcmlwdG9yIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGdpdDogYm9vbGVhbjtcbiAgICBnaXROYW1lOiBzdHJpbmc7XG4gICAgZm9sZGVyczogRm9sZGVyRGVzY3JpcHRvcltdO1xuICAgIGZpbGVzOiBGaWxlRGVzY3JpcHRvcltdO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyBhIHNpbmdsZSBHaXQgY29tbWl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdENvbW1pdEluZm8ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgYXV0aG9yOiBzdHJpbmc7XG4gICAgZW1haWxBZGRyZXNzOiBzdHJpbmc7XG4gICAgZGF0ZVRpbWU6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cblxuLyoqXG4gKiBEZXNjcmliZXMgYSBHaXQgYnJhbmNoIChsb2NhbCBvciByZW1vdGUpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdEJyYW5jaCB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHJlbW90ZTogYm9vbGVhbjtcbiAgICBjdXJyZW50OiBib29sZWFuO1xuICAgIGNvbW1pdE9iamVjdElkOiBzdHJpbmc7XG4gICAgY29tbWl0U2hvcnRJZDogc3RyaW5nO1xuICAgIGNvbW1pdERhdGU6IHN0cmluZztcbiAgICBjb21taXRNZXNzYWdlOiBzdHJpbmc7XG4gICAgY29tbWl0QXV0aG9yOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIGEgZmlsZSB0aGF0IGhhcyBiZWVuIGNoYW5nZWQgKHN0YWdlZCBvciB1bnN0YWdlZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0Q2hhbmdlZEZpbGUge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICB0eXBlOiBudW1iZXI7XG59XG5cbi8qKlxuKiBUaGUgSUdpdENvbm5lY3RvciBwcm92aWRlcyB0aGUgc2ltcGxpZmllZCBtZXRob2RzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggYSBHaXQgU0NNIHNlcnZlci5cbiogVGhpcyBpbnRlcmZhY2UgaXMgcHJpbWFyaWx5IGltcGxlbWVudGVkIGJ5IHRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSB0aGUgbmF0aXZlIEphdmEgZmFjYWRlLlxuKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0Q29ubmVjdG9yIHtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG9yaWdpbiB1cmxzLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZldGNoIGFuZCBwdXNoIFVSTHMuXG4gICAgICovXG4gICAgZ2V0T3JpZ2luVXJscygpOiB7IGZldGNoVXJsOiBzdHJpbmc7IHB1c2hVcmw6IHN0cmluZzsgfTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZldGNoIHVybC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmZXRjaFVybCBUaGUgbmV3IGZldGNoIFVSTC5cbiAgICAgKiBAdGhyb3dzIFVSSVN5bnRheEV4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uXG4gICAgICovXG4gICAgc2V0RmV0Y2hVcmwoZmV0Y2hVcmw6IHN0cmluZyk6IHZvaWRcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHB1c2ggdXJsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHB1c2hVcmwgVGhlIG5ldyBwdXNoIFVSTC5cbiAgICAgKiBAdGhyb3dzIFVSSVN5bnRheEV4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uXG4gICAgICovXG4gICAgc2V0UHVzaFVybChwdXNoVXJsOiBzdHJpbmcpOiB2b2lkXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGZpbGUocykgdG8gdGhlIHN0YWdpbmcgaW5kZXguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZVBhdHRlcm4gRmlsZSB0byBhZGQgY29udGVudCBmcm9tLiBFeGFtcGxlOiBcIi5cIiBpbmNsdWRlcyBhbGwgZmlsZXMuXG4gICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiwgTm9GaWxlcGF0dGVybkV4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uXG4gICAgICovXG4gICAgYWRkKGZpbGVQYXR0ZXJuOiBzdHJpbmcpOiB2b2lkXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGRlbGV0ZWQgZmlsZShzKSB0byB0aGUgc3RhZ2luZyBpbmRleC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlUGF0dGVybiBGaWxlIHRvIGFkZCBjb250ZW50IGZyb20uIEV4YW1wbGU6IFwiLlwiIGluY2x1ZGVzIGFsbCBmaWxlcy5cbiAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uLCBOb0ZpbGVwYXR0ZXJuRXhjZXB0aW9uLCBHaXRBUElFeGNlcHRpb25cbiAgICAgKi9cbiAgICBhZGREZWxldGVkKGZpbGVQYXR0ZXJuOiBzdHJpbmcpOiB2b2lkXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgZnJvbSB0aGUgaW5kZXguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBiZSByZW1vdmVkLlxuICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24sIE5vRmlsZXBhdHRlcm5FeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvblxuICAgICAqL1xuICAgIHJlbW92ZShwYXRoOiBzdHJpbmcpOiB2b2lkXG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnQgdG8gaGVhZCByZXZpc2lvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGJlIHJldmVydGVkLlxuICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24sIE5vRmlsZXBhdHRlcm5FeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvblxuICAgICAqL1xuICAgIHJldmVydChwYXRoOiBzdHJpbmcpOiB2b2lkXG5cblxuICAgIC8qKlxuICAgICAqIEFkZHMgY2hhbmdlcyB0byB0aGUgc3RhZ2luZyBpbmRleCwgdGhlbiBwZXJmb3JtcyBhIGNvbW1pdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBjb21taXQgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29tbWl0dGVyLlxuICAgICAqIEBwYXJhbSBlbWFpbCBUaGUgZW1haWwgb2YgdGhlIGNvbW1pdHRlci5cbiAgICAgKiBAcGFyYW0gYWxsIElmIHRydWUsIGF1dG9tYXRpY2FsbHkgc3RhZ2VzIG1vZGlmaWVkIGFuZCBkZWxldGVkIGZpbGVzLlxuICAgICAqIEB0aHJvd3MgVmFyaW91cyBHaXQgZXhjZXB0aW9uc1xuICAgICAqL1xuICAgIGNvbW1pdChtZXNzYWdlOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgZW1haWw6IHN0cmluZywgYWxsOiBib29sZWFuKTogdm9pZDtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgbmV3IGJyYW5jaCBmcm9tIGEgcGFydGljdWxhciBzdGFydCBwb2ludC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuZXcgYnJhbmNoIG5hbWUuXG4gICAgICogQHBhcmFtIHN0YXJ0UG9pbnQgVmFsaWQgdHJlZS1pc2ggb2JqZWN0IChlLmcuLCBcIm1hc3RlclwiLCBcIkhFQURcIiwgY29tbWl0IGhhc2gpLlxuICAgICAqIEB0aHJvd3MgUmVmQWxyZWFkeUV4aXN0c0V4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uXG4gICAgICovXG4gICAgY3JlYXRlQnJhbmNoKG5hbWU6IHN0cmluZywgc3RhcnRQb2ludDogc3RyaW5nKTogdm9pZFxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyB0aGUgYnJhbmNoLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIGJyYW5jaCBuYW1lIHRvIGRlbGV0ZS5cbiAgICAgKiBAdGhyb3dzIFJlZkFscmVhZHlFeGlzdHNFeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvblxuICAgICAqL1xuICAgIGRlbGV0ZUJyYW5jaChuYW1lOiBzdHJpbmcpOiB2b2lkXG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWVzIHRoZSBicmFuY2guXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2xkTmFtZSBUaGUgb2xkIGJyYW5jaCBuYW1lLlxuICAgICAqIEBwYXJhbSBuZXdOYW1lIFRoZSBuZXcgYnJhbmNoIG5hbWUuXG4gICAgICogQHRocm93cyBSZWZBbHJlYWR5RXhpc3RzRXhjZXB0aW9uLCBHaXRBUElFeGNlcHRpb25cbiAgICAgKi9cbiAgICByZW5hbWVCcmFuY2gob2xkTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmcpOiB2b2lkXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG5ldyByZW1vdGUgYnJhbmNoIGZyb20gYSBwYXJ0aWN1bGFyIHN0YXJ0IHBvaW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIGJyYW5jaCBuYW1lLlxuICAgICAqIEBwYXJhbSBzdGFydFBvaW50IFZhbGlkIHRyZWUtaXNoIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gdXNlcm5hbWUgVXNlcm5hbWUgZm9yIHRoZSByZW1vdGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgUGFzc3dvcmQgZm9yIHRoZSByZW1vdGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAdGhyb3dzIFJlZkFscmVhZHlFeGlzdHNFeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvblxuICAgICAqL1xuICAgIGNyZWF0ZVJlbW90ZUJyYW5jaChuYW1lOiBzdHJpbmcsIHN0YXJ0UG9pbnQ6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IHZvaWRcblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgdGhlIHJlbW90ZSBicmFuY2guXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVtb3RlIGJyYW5jaCB0byBkZWxldGUuXG4gICAgICogQHBhcmFtIHVzZXJuYW1lIFVzZXJuYW1lIGZvciB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuXG4gICAgICogQHBhcmFtIHBhc3N3b3JkIFBhc3N3b3JkIGZvciB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuXG4gICAgICogQHRocm93cyBSZWZBbHJlYWR5RXhpc3RzRXhjZXB0aW9uLCBHaXRBUElFeGNlcHRpb25cbiAgICAgKi9cbiAgICBkZWxldGVSZW1vdGVCcmFuY2gobmFtZTogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogdm9pZFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tvdXQgdG8gYSB2YWxpZCB0cmVlLWlzaCBvYmplY3QgKGUuZy4sIGJyYW5jaCBuYW1lLCBjb21taXQgaGFzaCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgdHJlZS1pc2ggb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIFRoZSBKR2l0IFJlZiBvYmplY3QuXG4gICAgICogQHRocm93cyBSZWZBbHJlYWR5RXhpc3RzRXhjZXB0aW9uLCBHaXRBUElFeGNlcHRpb25cbiAgICAgKi9cbiAgICBjaGVja291dChuYW1lOiBzdHJpbmcpOiBhbnlcblxuICAgIC8qKlxuICAgICAqIEhhcmQgcmVzZXQgdGhlIHJlcG9zaXRvcnkuIFJlc2V0cyB3b3JraW5nIGRpcmVjdG9yeSBhbmQgc3RhZ2luZyBpbmRleCB0byBtYXRjaCB0aGUgR2l0IHJlcG9zaXRvcnkgSEVBRC5cbiAgICAgKlxuICAgICAqIEB0aHJvd3MgQ2hlY2tvdXRDb25mbGljdEV4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uXG4gICAgICovXG4gICAgaGFyZFJlc2V0KCk6IHZvaWRcblxuICAgIC8qKlxuICAgICAqIEZldGNoZXMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IGFuZCB0cmllcyB0byBtZXJnZSBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCAoUHVsbCkuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIFZhcmlvdXMgR2l0IGV4Y2VwdGlvbnNcbiAgICAgKi9cbiAgICBwdWxsKCk6IHZvaWRcblxuICAgIC8qKlxuICAgICAqIEZldGNoZXMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IGFuZCB0cmllcyB0byBtZXJnZSBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCAoUHVsbCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlcm5hbWUgVXNlcm5hbWUgZm9yIHRoZSByZW1vdGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgUGFzc3dvcmQgZm9yIHRoZSByZW1vdGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAdGhyb3dzIFZhcmlvdXMgR2l0IGV4Y2VwdGlvbnNcbiAgICAgKi9cbiAgICBwdWxsKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiB2b2lkXG5cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgdGhlIGNvbW1pdHRlZCBjaGFuZ2VzIHRvIHRoZSByZW1vdGUgcmVwb3NpdG9yeS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1c2VybmFtZSBVc2VybmFtZSBmb3IgdGhlIHJlbW90ZSByZXBvc2l0b3J5LlxuICAgICAqIEBwYXJhbSBwYXNzd29yZCBQYXNzd29yZCBmb3IgdGhlIHJlbW90ZSByZXBvc2l0b3J5LlxuICAgICAqIEB0aHJvd3MgSW52YWxpZFJlbW90ZUV4Y2VwdGlvbiwgVHJhbnNwb3J0RXhjZXB0aW9uLCBHaXRBUElFeGNlcHRpb25cbiAgICAgKi9cbiAgICBwdXNoKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiB2b2lkXG5cbiAgICAvKipcbiAgICAgKiBUcmllcyB0byByZWJhc2UgdGhlIHNlbGVjdGVkIGJyYW5jaCBvbiB0b3Agb2YgdGhlIGN1cnJlbnQgb25lLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIGJyYW5jaCB0byByZWJhc2UuXG4gICAgICogQHRocm93cyBOb0hlYWRFeGNlcHRpb24sIFdyb25nUmVwb3NpdG9yeVN0YXRlRXhjZXB0aW9uLCBHaXRBUElFeGNlcHRpb25cbiAgICAgKi9cbiAgICByZWJhc2UobmFtZTogc3RyaW5nKTogdm9pZFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgR2l0IHJlcG9zaXRvcnkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgSkdpdCBTdGF0dXMgb2JqZWN0LlxuICAgICAqIEB0aHJvd3MgTm9Xb3JrVHJlZUV4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uXG4gICAgICovXG4gICAgc3RhdHVzKCk6IGFueVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBvZiB0aGUgR2l0IHJlcG9zaXRvcnkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgYnJhbmNoIG5hbWUgYXMgYSBzdHJpbmcuXG4gICAgICogQHRocm93cyBJT0V4Y2VwdGlvblxuICAgICAqL1xuICAgIGdldEJyYW5jaCgpOiBzdHJpbmdcblxuICAgIC8qKlxuICAgICAqIExpc3QgYWxsIHRoZSBsb2NhbCBicmFuY2hlcyBpbmZvLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBsaXN0IG9mIGxvY2FsIHtAbGluayBHaXRCcmFuY2h9IG9iamVjdHMuXG4gICAgICogQHRocm93cyBHaXRDb25uZWN0b3JFeGNlcHRpb25cbiAgICAgKi9cbiAgICBnZXRMb2NhbEJyYW5jaGVzKCk6IEdpdEJyYW5jaFtdXG5cbiAgICAvKipcbiAgICAgKiBMaXN0IGFsbCB0aGUgcmVtb3RlIGJyYW5jaGVzIGluZm8uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIGxpc3Qgb2YgcmVtb3RlIHtAbGluayBHaXRCcmFuY2h9IG9iamVjdHMuXG4gICAgICogQHRocm93cyBHaXRDb25uZWN0b3JFeGNlcHRpb25cbiAgICAgKi9cbiAgICBnZXRSZW1vdGVCcmFuY2hlcygpOiBHaXRCcmFuY2hbXVxuXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGxpc3Qgb2YgdGhlIHVuc3RhZ2VkIGZpbGVzLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBsaXN0IG9mIHtAbGluayBHaXRDaGFuZ2VkRmlsZX0gb2JqZWN0cy5cbiAgICAgKiBAdGhyb3dzIEdpdENvbm5lY3RvckV4Y2VwdGlvblxuICAgICAqL1xuICAgIGdldFVuc3RhZ2VkQ2hhbmdlcygpOiBHaXRDaGFuZ2VkRmlsZVtdXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGxpc3Qgb2YgdGhlIHN0YWdlZCBmaWxlcy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEEgbGlzdCBvZiB7QGxpbmsgR2l0Q2hhbmdlZEZpbGV9IG9iamVjdHMuXG4gICAgICogQHRocm93cyBHaXRDb25uZWN0b3JFeGNlcHRpb25cbiAgICAgKi9cbiAgICBnZXRTdGFnZWRDaGFuZ2VzKCk6IEdpdENoYW5nZWRGaWxlW11cblxuICAgIC8qKlxuICAgICAqIEdldCBmaWxlIGNvbnRlbnQgZnJvbSB0aGUgSEVBRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXRoIFRoZSBmaWxlIHBhdGguXG4gICAgICogQHBhcmFtIHJldlN0ciBUaGUgcmV2aXNpb24gc3RyaW5nIChlLmcuLCBjb21taXQgaGFzaCwgYnJhbmNoIG5hbWUpLlxuICAgICAqIEByZXR1cm5zIFRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGFzIGEgc3RyaW5nLlxuICAgICAqIEB0aHJvd3MgR2l0Q29ubmVjdG9yRXhjZXB0aW9uXG4gICAgICovXG4gICAgZ2V0RmlsZUNvbnRlbnQocGF0aDogc3RyaW5nLCByZXZTdHI6IHN0cmluZyk6IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogR2V0IGhpc3Rvcnkgb2YgdGhlIHJlcG9zaXRvcnkgb3IgYSBzcGVjaWZpYyBmaWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhdGggVGhlIGZpbGUgcGF0aCBvciBudWxsIHRvIGdldCB0aGUgZW50aXJlIHJlcG9zaXRvcnkgaGlzdG9yeS5cbiAgICAgKiBAcmV0dXJucyBBIGxpc3Qgb2Yge0BsaW5rIEdpdENvbW1pdEluZm99IG9iamVjdHMuXG4gICAgICogQHRocm93cyBHaXRDb25uZWN0b3JFeGNlcHRpb25cbiAgICAgKi9cbiAgICBnZXRIaXN0b3J5KHBhdGg6IHN0cmluZyk6IEdpdENvbW1pdEluZm9bXVxufVxuXG4vKipcbiAqIFN0YXRpYyBjbGllbnQgZmFjYWRlIGZvciB3b3Jrc3BhY2UtbGV2ZWwgR2l0IG9wZXJhdGlvbnMsIGFic3RyYWN0aW5nIHRoZSBuYXRpdmUgR2l0RmFjYWRlLlxuICovXG5leHBvcnQgY2xhc3MgQ2xpZW50IHtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGEgbmV3IEdpdCByZXBvc2l0b3J5IGZvciBhIHByb2plY3QsIHBlcmZvcm1zIGFuIGluaXRpYWwgY29tbWl0LCBhbmQgcHVzaGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXJuYW1lIG9mIHRoZSBjb21taXR0ZXIuXG4gICAgICogQHBhcmFtIGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBjb21taXR0ZXIuXG4gICAgICogQHBhcmFtIHdvcmtzcGFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICAgKiBAcGFyYW0gcHJvamVjdE5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb2plY3QuXG4gICAgICogQHBhcmFtIHJlcG9zaXRvcnlOYW1lIFRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5ICh3aGVyZSB0byBwdXQgdGhlIGdpdCBmb2xkZXIpLlxuICAgICAqIEBwYXJhbSBjb21taXRNZXNzYWdlIFRoZSBpbml0aWFsIGNvbW1pdCBtZXNzYWdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaW5pdFJlcG9zaXRvcnkodXNlcjogc3RyaW5nLCBlbWFpbDogc3RyaW5nLCB3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHByb2plY3ROYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcsIGNvbW1pdE1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBHaXRGYWNhZGUuaW5pdFJlcG9zaXRvcnkodXNlciwgZW1haWwsIHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCByZXBvc2l0b3J5TmFtZSwgY29tbWl0TWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBjb21taXQgaW4gdGhlIHNwZWNpZmllZCByZXBvc2l0b3J5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXJuYW1lIG9mIHRoZSBjb21taXR0ZXIuXG4gICAgICogQHBhcmFtIGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBjb21taXR0ZXIuXG4gICAgICogQHBhcmFtIHdvcmtzcGFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeU5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkuXG4gICAgICogQHBhcmFtIGNvbW1pdE1lc3NhZ2UgVGhlIGNvbW1pdCBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSBhbGwgSWYgdHJ1ZSwgYXV0b21hdGljYWxseSBzdGFnZXMgbW9kaWZpZWQgYW5kIGRlbGV0ZWQgZmlsZXMgYmVmb3JlIGNvbW1pdHRpbmcuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjb21taXQodXNlcjogc3RyaW5nLCBlbWFpbDogc3RyaW5nLCB3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcsIGNvbW1pdE1lc3NhZ2U6IHN0cmluZywgYWxsOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIEdpdEZhY2FkZS5jb21taXQodXNlciwgZW1haWwsIHdvcmtzcGFjZU5hbWUsIHJlcG9zaXRvcnlOYW1lLCBjb21taXRNZXNzYWdlLCBhbGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgYWxsIEdpdCByZXBvc2l0b3JpZXMgKHByb2plY3RzKSB3aXRoaW4gdGhlIHNwZWNpZmllZCB3b3Jrc3BhY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd29ya3NwYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHtAbGluayBQcm9qZWN0RGVzY3JpcHRvcn0gb2JqZWN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldEdpdFJlcG9zaXRvcmllcyh3b3Jrc3BhY2VOYW1lOiBzdHJpbmcpOiBQcm9qZWN0RGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIEdpdEZhY2FkZS5nZXRHaXRSZXBvc2l0b3JpZXMod29ya3NwYWNlTmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBjb21taXQgaGlzdG9yeSBmb3IgdGhlIHNwZWNpZmllZCByZXBvc2l0b3J5IG9yIGEgc3BlY2lmaWMgZmlsZSBwYXRoIHdpdGhpbiBpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXBvc2l0b3J5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAcGFyYW0gd29ya3NwYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgICAqIEBwYXJhbSBwYXRoIFRoZSBmaWxlIHBhdGggZm9yIGhpc3RvcnksIG9yIG51bGwvZW1wdHkgc3RyaW5nIGZvciBmdWxsIHJlcG9zaXRvcnkgaGlzdG9yeS5cbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB7QGxpbmsgR2l0Q29tbWl0SW5mb30gb2JqZWN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldEhpc3RvcnkocmVwb3NpdG9yeU5hbWU6IHN0cmluZywgd29ya3NwYWNlTmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBHaXRDb21taXRJbmZvW10ge1xuICAgICAgICByZXR1cm4gR2l0RmFjYWRlLmdldEhpc3RvcnkocmVwb3NpdG9yeU5hbWUsIHdvcmtzcGFjZU5hbWUsIHBhdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgdGhlIHNwZWNpZmllZCBHaXQgcmVwb3NpdG9yeS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3b3Jrc3BhY2VOYW1lIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAgICogQHBhcmFtIHJlcG9zaXRvcnlOYW1lIFRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IHRvIGRlbGV0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGRlbGV0ZVJlcG9zaXRvcnkod29ya3NwYWNlTmFtZTogc3RyaW5nLCByZXBvc2l0b3J5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHJldHVybiBHaXRGYWNhZGUuZGVsZXRlUmVwb3NpdG9yeSh3b3Jrc3BhY2VOYW1lLCByZXBvc2l0b3J5TmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvbmVzIGEgcmVtb3RlIHJlcG9zaXRvcnkgaW50byB0aGUgbG9jYWwgd29ya3NwYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHdvcmtzcGFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeVVyaSBUaGUgVVJJIG9mIHRoZSByZW1vdGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAcGFyYW0gdXNlcm5hbWUgVGhlIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gYnJhbmNoIFRoZSBzcGVjaWZpYyBicmFuY2ggdG8gY2hlY2tvdXQgYWZ0ZXIgY2xvbmluZy5cbiAgICAgKiBAcmV0dXJucyBBIEdpdENvbm5lY3RvciBpbnN0YW5jZSBmb3IgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCB0aGUgY2xvbmVkIHJlcG9zaXRvcnkuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjbG9uZVJlcG9zaXRvcnkod29ya3NwYWNlTmFtZTogc3RyaW5nLCByZXBvc2l0b3J5VXJpOiBzdHJpbmcsIHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGJyYW5jaDogc3RyaW5nKTogR2l0Q29ubmVjdG9yIHtcbiAgICAgICAgLy8gVGhlIG5hdGl2ZSBHaXRGYWNhZGUgcmV0dXJucyBhIEphdmEgb2JqZWN0IGltcGxlbWVudGluZyBHaXRDb25uZWN0b3JcbiAgICAgICAgcmV0dXJuIEdpdEZhY2FkZS5jbG9uZVJlcG9zaXRvcnkod29ya3NwYWNlTmFtZSwgcmVwb3NpdG9yeVVyaSwgdXNlcm5hbWUsIHBhc3N3b3JkLCBicmFuY2gpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1bGxzIGNoYW5nZXMgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgYW5kIGF0dGVtcHRzIHRvIG1lcmdlIHRoZW0gaW50byB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd29ya3NwYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgICAqIEBwYXJhbSByZXBvc2l0b3J5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAcGFyYW0gdXNlcm5hbWUgVGhlIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHB1bGwod29ya3NwYWNlTmFtZTogc3RyaW5nLCByZXBvc2l0b3J5TmFtZTogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEdpdEZhY2FkZS5wdWxsKHdvcmtzcGFjZU5hbWUsIHJlcG9zaXRvcnlOYW1lLCB1c2VybmFtZSwgcGFzc3dvcmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1c2hlcyB0aGUgbG9jYWwgY29tbWl0cyB0byB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd29ya3NwYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgICAqIEBwYXJhbSByZXBvc2l0b3J5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAcGFyYW0gdXNlcm5hbWUgVGhlIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHB1c2god29ya3NwYWNlTmFtZTogc3RyaW5nLCByZXBvc2l0b3J5TmFtZTogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEdpdEZhY2FkZS5wdXNoKHdvcmtzcGFjZU5hbWUsIHJlcG9zaXRvcnlOYW1lLCB1c2VybmFtZSwgcGFzc3dvcmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBvdXQgYSBzcGVjaWZpYyBicmFuY2gsIGNvbW1pdCwgb3IgdGFnIGluIHRoZSByZXBvc2l0b3J5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHdvcmtzcGFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeU5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkuXG4gICAgICogQHBhcmFtIGJyYW5jaCBUaGUgYnJhbmNoIG9yIHRyZWUtaXNoIG9iamVjdCB0byBjaGVjayBvdXQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjaGVja291dCh3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcsIGJyYW5jaDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEdpdEZhY2FkZS5jaGVja291dCh3b3Jrc3BhY2VOYW1lLCByZXBvc2l0b3J5TmFtZSwgYnJhbmNoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGJyYW5jaCBzdGFydGluZyBmcm9tIGEgc3BlY2lmaWVkIHBvaW50IChlLmcuLCBIRUFELCBhIGNvbW1pdCBoYXNoLCBvciBhbm90aGVyIGJyYW5jaCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd29ya3NwYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgICAqIEBwYXJhbSByZXBvc2l0b3J5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAcGFyYW0gYnJhbmNoIFRoZSBuYW1lIG9mIHRoZSBuZXcgYnJhbmNoIHRvIGNyZWF0ZS5cbiAgICAgKiBAcGFyYW0gc3RhcnRpbmdQb2ludCBUaGUgdHJlZS1pc2ggb2JqZWN0IHRvIHN0YXJ0IHRoZSBuZXcgYnJhbmNoIGZyb20uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVCcmFuY2god29ya3NwYWNlTmFtZTogc3RyaW5nLCByZXBvc2l0b3J5TmFtZTogc3RyaW5nLCBicmFuY2g6IHN0cmluZywgc3RhcnRpbmdQb2ludDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIEdpdEZhY2FkZS5jcmVhdGVCcmFuY2god29ya3NwYWNlTmFtZSwgcmVwb3NpdG9yeU5hbWUsIGJyYW5jaCwgc3RhcnRpbmdQb2ludCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhIGxvY2FsIGJyYW5jaC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3b3Jrc3BhY2VOYW1lIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAgICogQHBhcmFtIHJlcG9zaXRvcnlOYW1lIFRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5LlxuICAgICAqIEBwYXJhbSBicmFuY2ggVGhlIG5hbWUgb2YgdGhlIGJyYW5jaCB0byBkZWxldGUuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBkZWxldGVCcmFuY2god29ya3NwYWNlTmFtZTogc3RyaW5nLCByZXBvc2l0b3J5TmFtZTogc3RyaW5nLCBicmFuY2g6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBHaXRGYWNhZGUuZGVsZXRlQnJhbmNoKHdvcmtzcGFjZU5hbWUsIHJlcG9zaXRvcnlOYW1lLCBicmFuY2gpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbmFtZXMgYSBsb2NhbCBicmFuY2guXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd29ya3NwYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgICAqIEBwYXJhbSByZXBvc2l0b3J5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAcGFyYW0gb2xkTmFtZSBUaGUgY3VycmVudCBuYW1lIG9mIHRoZSBicmFuY2guXG4gICAgICogQHBhcmFtIG5ld05hbWUgVGhlIG5ldyBuYW1lIGZvciB0aGUgYnJhbmNoLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVuYW1lQnJhbmNoKHdvcmtzcGFjZU5hbWU6IHN0cmluZywgcmVwb3NpdG9yeU5hbWU6IHN0cmluZywgb2xkTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgR2l0RmFjYWRlLnJlbmFtZUJyYW5jaCh3b3Jrc3BhY2VOYW1lLCByZXBvc2l0b3J5TmFtZSwgb2xkTmFtZSwgbmV3TmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyByZW1vdGUgYnJhbmNoIG9uIHRoZSBHaXQgc2VydmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHdvcmtzcGFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeU5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkuXG4gICAgICogQHBhcmFtIGJyYW5jaCBUaGUgbmFtZSBvZiB0aGUgcmVtb3RlIGJyYW5jaCB0byBjcmVhdGUuXG4gICAgICogQHBhcmFtIHN0YXJ0aW5nUG9pbnQgVGhlIHRyZWUtaXNoIG9iamVjdCB0byBzdGFydCB0aGUgbmV3IHJlbW90ZSBicmFuY2ggZnJvbS5cbiAgICAgKiBAcGFyYW0gdXNlcm5hbWUgVGhlIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJlbW90ZUJyYW5jaCh3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcsIGJyYW5jaDogc3RyaW5nLCBzdGFydGluZ1BvaW50OiBzdHJpbmcsIHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgR2l0RmFjYWRlLmNyZWF0ZVJlbW90ZUJyYW5jaCh3b3Jrc3BhY2VOYW1lLCByZXBvc2l0b3J5TmFtZSwgYnJhbmNoLCBzdGFydGluZ1BvaW50LCB1c2VybmFtZSwgcGFzc3dvcmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSByZW1vdGUgYnJhbmNoIG9uIHRoZSBHaXQgc2VydmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHdvcmtzcGFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeU5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkuXG4gICAgICogQHBhcmFtIGJyYW5jaCBUaGUgbmFtZSBvZiB0aGUgcmVtb3RlIGJyYW5jaCB0byBkZWxldGUuXG4gICAgICogQHBhcmFtIHVzZXJuYW1lIFRoZSB1c2VybmFtZSBmb3IgYXV0aGVudGljYXRpb24uXG4gICAgICogQHBhcmFtIHBhc3N3b3JkIFRoZSBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBkZWxldGVSZW1vdGVCcmFuY2god29ya3NwYWNlTmFtZTogc3RyaW5nLCByZXBvc2l0b3J5TmFtZTogc3RyaW5nLCBicmFuY2g6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBHaXRGYWNhZGUuZGVsZXRlUmVtb3RlQnJhbmNoKHdvcmtzcGFjZU5hbWUsIHJlcG9zaXRvcnlOYW1lLCBicmFuY2gsIHVzZXJuYW1lLCBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSByZXBvc2l0b3J5LCBkaXNjYXJkaW5nIGFsbCB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd29ya3NwYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgICAqIEBwYXJhbSByZXBvc2l0b3J5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGhhcmRSZXNldCh3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgR2l0RmFjYWRlLmhhcmRSZXNldCh3b3Jrc3BhY2VOYW1lLCByZXBvc2l0b3J5TmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhcHBsaWVzIGNvbW1pdHMgZnJvbSB0aGUgc3BlY2lmaWVkIGJyYW5jaCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3b3Jrc3BhY2VOYW1lIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAgICogQHBhcmFtIHJlcG9zaXRvcnlOYW1lIFRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5LlxuICAgICAqIEBwYXJhbSBicmFuY2ggVGhlIGJyYW5jaCB0byByZWJhc2UuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyByZWJhc2Uod29ya3NwYWNlTmFtZTogc3RyaW5nLCByZXBvc2l0b3J5TmFtZTogc3RyaW5nLCBicmFuY2g6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBHaXRGYWNhZGUucmViYXNlKHdvcmtzcGFjZU5hbWUsIHJlcG9zaXRvcnlOYW1lLCBicmFuY2gpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHJlcG9zaXRvcnkgKHN0YWdlZCwgdW5zdGFnZWQsIHVudHJhY2tlZCBmaWxlcykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd29ya3NwYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgICAqIEBwYXJhbSByZXBvc2l0b3J5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVwb3NpdG9yeSBzdGF0dXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBzdGF0dXMod29ya3NwYWNlTmFtZTogc3RyaW5nLCByZXBvc2l0b3J5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEdpdEZhY2FkZS5zdGF0dXMod29ya3NwYWNlTmFtZSwgcmVwb3NpdG9yeU5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBicmFuY2guXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd29ya3NwYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgICAqIEBwYXJhbSByZXBvc2l0b3J5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRCcmFuY2god29ya3NwYWNlTmFtZTogc3RyaW5nLCByZXBvc2l0b3J5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEdpdEZhY2FkZS5nZXRCcmFuY2god29ya3NwYWNlTmFtZSwgcmVwb3NpdG9yeU5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgYWxsIGxvY2FsIGJyYW5jaGVzIGluIHRoZSByZXBvc2l0b3J5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHdvcmtzcGFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeU5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2Yge0BsaW5rIEdpdEJyYW5jaH0gb2JqZWN0cyByZXByZXNlbnRpbmcgbG9jYWwgYnJhbmNoZXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRMb2NhbEJyYW5jaGVzKHdvcmtzcGFjZU5hbWU6IHN0cmluZywgcmVwb3NpdG9yeU5hbWU6IHN0cmluZyk6IEdpdEJyYW5jaFtdIHtcbiAgICAgICAgcmV0dXJuIEdpdEZhY2FkZS5nZXRMb2NhbEJyYW5jaGVzKHdvcmtzcGFjZU5hbWUsIHJlcG9zaXRvcnlOYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGFsbCByZW1vdGUgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgdGhlIHJlcG9zaXRvcnkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd29ya3NwYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgICAqIEBwYXJhbSByZXBvc2l0b3J5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB7QGxpbmsgR2l0QnJhbmNofSBvYmplY3RzIHJlcHJlc2VudGluZyByZW1vdGUgYnJhbmNoZXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZW1vdGVCcmFuY2hlcyh3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcpOiBHaXRCcmFuY2hbXSB7XG4gICAgICAgIHJldHVybiBHaXRGYWNhZGUuZ2V0UmVtb3RlQnJhbmNoZXMod29ya3NwYWNlTmFtZSwgcmVwb3NpdG9yeU5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgYWxsIHVuc3RhZ2VkIGZpbGVzIChjaGFuZ2VzIG5vdCB5ZXQgYWRkZWQgdG8gdGhlIGluZGV4KS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3b3Jrc3BhY2VOYW1lIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAgICogQHBhcmFtIHJlcG9zaXRvcnlOYW1lIFRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5LlxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHtAbGluayBHaXRDaGFuZ2VkRmlsZX0gb2JqZWN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldFVuc3RhZ2VkQ2hhbmdlcyh3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcpOiBHaXRDaGFuZ2VkRmlsZVtdIHtcbiAgICAgICAgcmV0dXJuIEdpdEZhY2FkZS5nZXRVbnN0YWdlZENoYW5nZXMod29ya3NwYWNlTmFtZSwgcmVwb3NpdG9yeU5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgYWxsIHN0YWdlZCBmaWxlcyAoY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXgsIHJlYWR5IGZvciBjb21taXQpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHdvcmtzcGFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICAgKiBAcGFyYW0gcmVwb3NpdG9yeU5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2Yge0BsaW5rIEdpdENoYW5nZWRGaWxlfSBvYmplY3RzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0U3RhZ2VkQ2hhbmdlcyh3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcpOiBHaXRDaGFuZ2VkRmlsZVtdIHtcbiAgICAgICAgLy8gQ29ycmVjdGVkIHJldHVybiB0eXBlIHRvIGFycmF5IG9mIEdpdENoYW5nZWRGaWxlXG4gICAgICAgIHJldHVybiBHaXRGYWNhZGUuZ2V0U3RhZ2VkQ2hhbmdlcyh3b3Jrc3BhY2VOYW1lLCByZXBvc2l0b3J5TmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBjb250ZW50IG9mIGEgZmlsZSBhdCBhIHNwZWNpZmljIHJldmlzaW9uIChjb21taXQsIGJyYW5jaCwgb3IgdGFnKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3b3Jrc3BhY2VOYW1lIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAgICogQHBhcmFtIHJlcG9zaXRvcnlOYW1lIFRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5LlxuICAgICAqIEBwYXJhbSBmaWxlUGF0aCBUaGUgcGF0aCB0byB0aGUgZmlsZS5cbiAgICAgKiBAcGFyYW0gcmV2U3RyIFRoZSByZXZpc2lvbiBzdHJpbmcgKGUuZy4sIGNvbW1pdCBoYXNoIG9yIGJyYW5jaCBuYW1lKS5cbiAgICAgKiBAcmV0dXJucyBUaGUgY29udGVudCBvZiB0aGUgZmlsZSBhcyBhIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldEZpbGVDb250ZW50KHdvcmtzcGFjZU5hbWU6IHN0cmluZywgcmVwb3NpdG9yeU5hbWU6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZywgcmV2U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gR2l0RmFjYWRlLmdldEZpbGVDb250ZW50KHdvcmtzcGFjZU5hbWUsIHJlcG9zaXRvcnlOYW1lLCBmaWxlUGF0aCwgcmV2U3RyKTtcbiAgICB9XG59XG5cblxuLy8gQHRzLWlnbm9yZVxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdC8vIEB0cy1pZ25vcmVcblx0bW9kdWxlLmV4cG9ydHMgPSBDbGllbnQ7XG59Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsTUFBTSxZQUFZLEtBQUssS0FBSyxvREFBb0Q7QUFzVHpFLE1BQU0sT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFZaEIsT0FBYyxlQUFlLE1BQWMsT0FBZSxlQUF1QixhQUFxQixnQkFBd0IsZUFBNkI7QUFDdkosY0FBVSxl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
@@ -0,0 +1,6 @@
1
+ export * from "./client";
2
+ import { Client } from "./client";
3
+ export {
4
+ Client as client
5
+ };
6
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2dpdC9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vY2xpZW50XCI7XG5leHBvcnQgeyBDbGllbnQgYXMgY2xpZW50IH0gZnJvbSBcIi4vY2xpZW50XCI7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxjQUFjO0FBQ2QsU0FBbUIsY0FBYzsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,205 @@
1
+ const HttpClientAsyncFacade = Java.type("org.eclipse.dirigible.components.api.http.HttpClientAsyncFacade");
2
+ const SpringBeanProvider = Java.type("org.eclipse.dirigible.components.spring.SpringBeanProvider");
3
+ const httpClient = SpringBeanProvider.getBean(HttpClientAsyncFacade.class);
4
+ class HttpAsyncClient {
5
+ /**
6
+ * Executes an asynchronous HTTP GET request.
7
+ * @param url The target URL.
8
+ * @param config The callback configuration object.
9
+ * @param options Request configuration options (e.g., headers, body, params).
10
+ */
11
+ getAsync(url, config, options) {
12
+ const newUrl = buildUrl(url, options);
13
+ const callback = createHttpResponseCallback(
14
+ httpClient,
15
+ config.success,
16
+ config.error,
17
+ config.cancel
18
+ );
19
+ if (options) {
20
+ httpClient.getAsync(newUrl, JSON.stringify(options), callback);
21
+ } else {
22
+ httpClient.getAsync(newUrl, JSON.stringify({}), callback);
23
+ }
24
+ }
25
+ /**
26
+ * Executes an asynchronous HTTP POST request.
27
+ * @param url The target URL.
28
+ * @param config The callback configuration object.
29
+ * @param options Request configuration options.
30
+ */
31
+ postAsync(url, config, options) {
32
+ const newUrl = buildUrl(url, options);
33
+ const callback = createHttpResponseCallback(
34
+ httpClient,
35
+ config.success,
36
+ config.error,
37
+ config.cancel
38
+ );
39
+ if (options) {
40
+ httpClient.postAsync(newUrl, JSON.stringify(options), callback);
41
+ } else {
42
+ httpClient.postAsync(newUrl, JSON.stringify({}), callback);
43
+ }
44
+ }
45
+ /**
46
+ * Executes an asynchronous HTTP PUT request.
47
+ * @param url The target URL.
48
+ * @param config The callback configuration object.
49
+ * @param options Request configuration options.
50
+ */
51
+ putAsync(url, config, options) {
52
+ const newUrl = buildUrl(url, options);
53
+ const callback = createHttpResponseCallback(
54
+ httpClient,
55
+ config.success,
56
+ config.error,
57
+ config.cancel
58
+ );
59
+ if (options) {
60
+ httpClient.putAsync(newUrl, JSON.stringify(options), callback);
61
+ } else {
62
+ httpClient.putAsync(newUrl, JSON.stringify({}), callback);
63
+ }
64
+ }
65
+ /**
66
+ * Executes an asynchronous HTTP PATCH request.
67
+ * @param url The target URL.
68
+ * @param config The callback configuration object.
69
+ * @param options Request configuration options.
70
+ */
71
+ patchAsync(url, config, options) {
72
+ const newUrl = buildUrl(url, options);
73
+ const callback = createHttpResponseCallback(
74
+ httpClient,
75
+ config.success,
76
+ config.error,
77
+ config.cancel
78
+ );
79
+ if (options) {
80
+ httpClient.patchAsync(newUrl, JSON.stringify(options), callback);
81
+ } else {
82
+ httpClient.patchAsync(newUrl, JSON.stringify({}), callback);
83
+ }
84
+ }
85
+ /**
86
+ * Executes an asynchronous HTTP DELETE request.
87
+ * @param url The target URL.
88
+ * @param config The callback configuration object.
89
+ * @param options Request configuration options.
90
+ */
91
+ deleteAsync(url, config, options) {
92
+ const newUrl = buildUrl(url, options);
93
+ const callback = createHttpResponseCallback(
94
+ httpClient,
95
+ config.success,
96
+ config.error,
97
+ config.cancel
98
+ );
99
+ if (options) {
100
+ httpClient.deleteAsync(newUrl, JSON.stringify(options), callback);
101
+ } else {
102
+ httpClient.deleteAsync(newUrl, JSON.stringify({}), callback);
103
+ }
104
+ }
105
+ /**
106
+ * Executes an asynchronous HTTP HEAD request.
107
+ * @param url The target URL.
108
+ * @param config The callback configuration object.
109
+ * @param options Request configuration options.
110
+ */
111
+ headAsync(url, config, options) {
112
+ const newUrl = buildUrl(url, options);
113
+ const callback = createHttpResponseCallback(
114
+ httpClient,
115
+ config.success,
116
+ config.error,
117
+ config.cancel
118
+ );
119
+ if (options) {
120
+ httpClient.headAsync(newUrl, JSON.stringify(options), callback);
121
+ } else {
122
+ httpClient.headAsync(newUrl, JSON.stringify({}), callback);
123
+ }
124
+ }
125
+ /**
126
+ * Executes an asynchronous HTTP TRACE request.
127
+ * @param url The target URL.
128
+ * @param config The callback configuration object.
129
+ * @param options Request configuration options.
130
+ */
131
+ traceAsync(url, config, options) {
132
+ const newUrl = buildUrl(url, options);
133
+ const callback = createHttpResponseCallback(
134
+ httpClient,
135
+ config.success,
136
+ config.error,
137
+ config.cancel
138
+ );
139
+ if (options) {
140
+ httpClient.traceAsync(newUrl, JSON.stringify(options), callback);
141
+ } else {
142
+ httpClient.traceAsync(newUrl, JSON.stringify({}), callback);
143
+ }
144
+ }
145
+ /**
146
+ * Initiates the execution of queued asynchronous requests (depending on the underlying Java client's threading model).
147
+ */
148
+ execute() {
149
+ httpClient.execute();
150
+ }
151
+ }
152
+ function getInstance() {
153
+ return new HttpAsyncClient();
154
+ }
155
+ ;
156
+ function createHttpResponseCallback(httpClient2, successCallback, errorCallback, cancelCallback) {
157
+ return httpClient2.createCallback(
158
+ createSuccessCallback(successCallback),
159
+ createErrorCallback(errorCallback),
160
+ createCancelCallback(cancelCallback)
161
+ );
162
+ }
163
+ function createSuccessCallback(callback) {
164
+ return "(function(httpResponse, isBinary, context) {\nvar response = {};\nresponse.statusCode = httpResponse.getStatusLine().getStatusCode();\nresponse.statusMessage = httpResponse.getStatusLine().getReasonPhrase();\nresponse.protocol = httpResponse.getProtocolVersion();\nresponse.binary = isBinary;\nvar headers = httpResponse.getAllHeaders();\nresponse.headers = [];\nfor (var i = 0; i < headers.length; i ++) {\n response.headers.push({\n name: headers[i].getName(),\n value: headers[i].getValue()\n });\n}\nvar entity = httpResponse.getEntity();\nif (entity) {\n var inputStream = entity.getContent();\n if (isBinary) {\n // Uses Java IOUtils to read binary data\n response.data = org.apache.commons.io.IOUtils.toByteArray(inputStream);\n } else {\n // Uses Java IOUtils to read text data\n response.text = org.apache.commons.io.IOUtils.toString(inputStream);\n }\n}\n(" + callback + ")(response, JSON.parse(context));\n})(__context.get('response'), __context.get('httpClientRequestOptions').isBinary(), __context.get('httpClientRequestOptions').getContext());\n";
165
+ }
166
+ function createErrorCallback(callback) {
167
+ if (callback) {
168
+ return "(" + callback + ")(__context.get('exception'))";
169
+ }
170
+ return void 0;
171
+ }
172
+ function createCancelCallback(callback) {
173
+ if (callback) {
174
+ return "(" + callback + ")()";
175
+ }
176
+ return void 0;
177
+ }
178
+ function buildUrl(url, options) {
179
+ if (options === void 0 || options === null || options.params === void 0 || options.params === null || options.params.length === 0) {
180
+ return url;
181
+ }
182
+ let newUrl = url;
183
+ for (let i = 0; i < options.params.length; i++) {
184
+ const param = options.params[i];
185
+ if (i === 0) {
186
+ if (newUrl.includes("?")) {
187
+ newUrl += "&";
188
+ } else {
189
+ newUrl += "?";
190
+ }
191
+ newUrl += param.name + "=" + param.value;
192
+ } else {
193
+ newUrl += "&" + param.name + "=" + param.value;
194
+ }
195
+ }
196
+ return newUrl;
197
+ }
198
+ if (typeof module !== "undefined") {
199
+ module.exports = { HttpAsyncClient, getInstance };
200
+ }
201
+ export {
202
+ HttpAsyncClient,
203
+ getInstance
204
+ };
205
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0dHAvY2xpZW50LWFzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIFByb3ZpZGVzIGEgSmF2YVNjcmlwdC9UeXBlU2NyaXB0IHdyYXBwZXIgKEZhY2FkZSkgZm9yIG1ha2luZyBhc3luY2hyb25vdXMgSFRUUCByZXF1ZXN0cy5cbiAqXG4gKi9cblxuLy8gLS0tIFNoYXJlZCBJbnRlcmZhY2VzIChmb3IgZG9jdW1lbnRhdGlvbiBjbGFyaXR5KSAtLS1cblxuLyoqIERlZmluZXMgYSBzaW5nbGUgSFRUUCBoZWFkZXIsIHVzZWQgZm9yIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBDbGllbnRIZWFkZXIge1xuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIChlLmcuLCAnQ29udGVudC1UeXBlJywgJ0F1dGhvcml6YXRpb24nKS4gKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyLiAqL1xuICAgIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKiBEZWZpbmVzIGEgcXVlcnkgcGFyYW1ldGVyIHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgVVJMLiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQ2xpZW50UGFyYW0ge1xuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgVVJMIHF1ZXJ5IHBhcmFtZXRlciAoZS5nLiwgJ2lkJykuICovXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBUaGUgdmFsdWUgb2YgdGhlIFVSTCBxdWVyeSBwYXJhbWV0ZXIuICovXG4gICAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqIERlZmluZXMgYSBmaWxlIHRvIGJlIGluY2x1ZGVkIGluIGEgbXVsdGktcGFydCBmb3JtIGRhdGEgcmVxdWVzdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENsaWVudEZpbGUge1xuICAgIC8qKiBUaGUgZm9ybSBmaWVsZCBuYW1lIGZvciB0aGUgZmlsZS4gKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBmaWxlIHBhdGggb3IgY29udGVudC4gKi9cbiAgICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKiogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhbiBIVFRQIHJlcXVlc3QsIG1pcnJvcmluZyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSB1bmRlcmx5aW5nIEphdmEgY2xpZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQ2xpZW50UmVxdWVzdE9wdGlvbnMge1xuICAgIGV4cGVjdENvbnRpbnVlRW5hYmxlZD86IGJvb2xlYW47XG4gICAgcHJveHlIb3N0Pzogc3RyaW5nO1xuICAgIHByb3h5UG9ydD86IG51bWJlcjtcbiAgICBjb29raWVTcGVjPzogc3RyaW5nO1xuICAgIHJlZGlyZWN0c0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIHJlbGF0aXZlUmVkaXJlY3RzQWxsb3dlZD86IGJvb2xlYW47XG4gICAgY2lyY3VsYXJSZWRpcmVjdHNBbGxvd2VkPzogYm9vbGVhbjtcbiAgICBtYXhSZWRpcmVjdHM/OiBudW1iZXI7XG4gICAgYXV0aGVudGljYXRpb25FbmFibGVkPzogYm9vbGVhbjtcbiAgICB0YXJnZXRQcmVmZXJyZWRBdXRoU2NoZW1lcz86IHN0cmluZ1tdO1xuICAgIHByb3h5UHJlZmVycmVkQXV0aFNjaGVtZXM/OiBzdHJpbmdbXTtcbiAgICBjb25uZWN0aW9uUmVxdWVzdFRpbWVvdXQ/OiBudW1iZXI7XG4gICAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gICAgc29ja2V0VGltZW91dD86IG51bWJlcjtcbiAgICBjb250ZW50Q29tcHJlc3Npb25FbmFibGVkPzogYm9vbGVhbjtcbiAgICBzc2xUcnVzdEFsbEVuYWJsZWQ/OiBib29sZWFuO1xuICAgIGRhdGE/OiBhbnlbXTtcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIGZpbGVzPzogSHR0cENsaWVudEZpbGVbXTtcbiAgICBjaGFyYWN0ZXJFbmNvZGluZz86IHN0cmluZztcbiAgICBjaGFyYWN0ZXJFbmNvZGluZ0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIGNvbnRlbnRUeXBlPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiBIdHRwQ2xpZW50SGVhZGVyW107XG4gICAgcGFyYW1zPzogSHR0cENsaWVudFBhcmFtW107XG4gICAgYmluYXJ5PzogYm9vbGVhbjtcbiAgICBjb250ZXh0PzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHJlc3BvbnNlIHJldHVybmVkIGJ5IHRoZSBIdHRwQ2xpZW50IG1ldGhvZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgLyoqIFRoZSBIVFRQIHN0YXR1cyBjb2RlIChlLmcuLCAyMDAsIDQwNCwgNTAwKS4gKi9cbiAgICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gICAgLyoqIFRoZSBzdGF0dXMgbWVzc2FnZSByZXR1cm5lZCBieSB0aGUgc2VydmVyIChlLmcuLCAnT0snLCAnTm90IEZvdW5kJykuICovXG4gICAgc3RhdHVzTWVzc2FnZTogc3RyaW5nO1xuICAgIC8qKiBSZXNwb25zZSBib2R5IGNvbnRlbnQgYXMgYW4gYXJyYXkgb2YgYnl0ZXMgKGlmIHJlcXVlc3RlZCBhcyBiaW5hcnkpLiAqL1xuICAgIGRhdGE6IGFueVtdO1xuICAgIC8qKiBSZXNwb25zZSBib2R5IGNvbnRlbnQgYXMgYSBkZWNvZGVkIHN0cmluZy4gKi9cbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwcm90b2NvbCB1c2VkIChlLmcuLCAnSFRUUC8xLjEnKS4gKi9cbiAgICBwcm90b2NvbDogc3RyaW5nO1xuICAgIC8qKiBJbmRpY2F0ZXMgaWYgdGhlIHJlc3BvbnNlIHdhcyBwcm9jZXNzZWQgYXMgYmluYXJ5IGRhdGEuICovXG4gICAgYmluYXJ5OiBib29sZWFuO1xuICAgIC8qKiBBcnJheSBvZiBhbGwgaGVhZGVycyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UuICovXG4gICAgaGVhZGVyczogSHR0cENsaWVudEhlYWRlcltdXG59XG5cbi8vIC0tLSBBc3luY2hyb25vdXMgQ2xpZW50IEludGVyZmFjZXMgLS0tXG5cbi8qKlxuICogRGVmaW5lcyB0aGUgY2FsbGJhY2sgc3RydWN0dXJlIGZvciBhc3luY2hyb25vdXMgcmVxdWVzdHMuXG4gKiBOb3RlOiBDYWxsYmFja3MgYXJlIHByb3ZpZGVkIGFzIHN0cmluZ3MgY29udGFpbmluZyBleGVjdXRhYmxlIEphdmFTY3JpcHQgY29kZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQ2xpZW50QXN5bmNDb25maWcge1xuICAgIC8qKlxuICAgICAqIE1hbmRhdG9yeSBzdWNjZXNzIGNhbGxiYWNrIGFzIGEgKipzdHJpbmcgb2YgSmF2YVNjcmlwdCBjb2RlKiouXG4gICAgICogSXQgd2lsbCBiZSBleGVjdXRlZCB3aXRoIHNpZ25hdHVyZTogYChyZXNwb25zZTogSHR0cENsaWVudFJlc3BvbnNlLCBjb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiB2b2lkYFxuICAgICAqL1xuICAgIHN1Y2Nlc3M6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBlcnJvciBjYWxsYmFjayBhcyBhICoqc3RyaW5nIG9mIEphdmFTY3JpcHQgY29kZSoqLlxuICAgICAqIEl0IHdpbGwgYmUgZXhlY3V0ZWQgd2l0aCBzaWduYXR1cmU6IGAoZXhjZXB0aW9uOiBhbnkpID0+IHZvaWRgXG4gICAgICovXG4gICAgZXJyb3I/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwgY2FuY2VsIGNhbGxiYWNrIGFzIGEgKipzdHJpbmcgb2YgSmF2YVNjcmlwdCBjb2RlKiouXG4gICAgICogSXQgd2lsbCBiZSBleGVjdXRlZCB3aXRoIHNpZ25hdHVyZTogYCgpID0+IHZvaWRgXG4gICAgICovXG4gICAgY2FuY2VsPzogc3RyaW5nO1xufVxuXG5cbi8vIC0tLSBKYXZhIFR5cGUgSW1wb3J0cyAoQ3J1Y2lhbCBmb3IgSlZNIGludGVncmF0aW9uKSAtLS1cblxuLyoqIEltcG9ydHMgdGhlIG5hdGl2ZSBKYXZhIGNsYXNzIHJlc3BvbnNpYmxlIGZvciBhc3luY2hyb25vdXMgSFRUUCBleGVjdXRpb24uICovXG5jb25zdCBIdHRwQ2xpZW50QXN5bmNGYWNhZGUgPSBKYXZhLnR5cGUoXCJvcmcuZWNsaXBzZS5kaXJpZ2libGUuY29tcG9uZW50cy5hcGkuaHR0cC5IdHRwQ2xpZW50QXN5bmNGYWNhZGVcIik7XG5cbi8qKiBJbXBvcnRzIHRoZSBuYXRpdmUgSmF2YSBjbGFzcyBmb3IgcmV0cmlldmluZyBTcHJpbmctbWFuYWdlZCBiZWFucy4gKi9cbmNvbnN0IFNwcmluZ0JlYW5Qcm92aWRlciA9IEphdmEudHlwZShcIm9yZy5lY2xpcHNlLmRpcmlnaWJsZS5jb21wb25lbnRzLnNwcmluZy5TcHJpbmdCZWFuUHJvdmlkZXJcIik7XG5cbi8qKiBSZXRyaWV2ZXMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgYXN5bmNocm9ub3VzIEhUVFAgY2xpZW50IGZyb20gdGhlIFNwcmluZyBjb250ZXh0LiAqL1xuY29uc3QgaHR0cENsaWVudCA9IFNwcmluZ0JlYW5Qcm92aWRlci5nZXRCZWFuKEh0dHBDbGllbnRBc3luY0ZhY2FkZS5jbGFzcyk7XG5cblxuLyoqXG4gKiBUaGUgYXN5bmNocm9ub3VzIEhUVFAgY2xpZW50IGNsYXNzLiBBbGwgcmVxdWVzdCBtZXRob2RzIHJldHVybiBpbW1lZGlhdGVseVxuICogYW5kIGV4ZWN1dGUgY2FsbGJhY2tzIHVwb24gY29tcGxldGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBBc3luY0NsaWVudCB7XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhbiBhc3luY2hyb25vdXMgSFRUUCBHRVQgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgVVJMLlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNhbGxiYWNrIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFJlcXVlc3QgY29uZmlndXJhdGlvbiBvcHRpb25zIChlLmcuLCBoZWFkZXJzLCBib2R5LCBwYXJhbXMpLlxuICAgICAqL1xuXHRnZXRBc3luYyh1cmw6IHN0cmluZywgY29uZmlnOiBIdHRwQ2xpZW50QXN5bmNDb25maWcsIG9wdGlvbnM/OiBIdHRwQ2xpZW50UmVxdWVzdE9wdGlvbnMpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdVcmwgPSBidWlsZFVybCh1cmwsIG9wdGlvbnMpO1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gY3JlYXRlSHR0cFJlc3BvbnNlQ2FsbGJhY2soXG5cdFx0XHRodHRwQ2xpZW50LFxuXHRcdFx0Y29uZmlnLnN1Y2Nlc3MsXG5cdFx0XHRjb25maWcuZXJyb3IsXG5cdFx0XHRjb25maWcuY2FuY2VsXG5cdFx0KTtcblx0XHRpZiAob3B0aW9ucykge1xuXHRcdFx0aHR0cENsaWVudC5nZXRBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLCBjYWxsYmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGh0dHBDbGllbnQuZ2V0QXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeSh7fSksIGNhbGxiYWNrKTtcblx0XHR9XG5cdH07XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhbiBhc3luY2hyb25vdXMgSFRUUCBQT1NUIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHVybCBUaGUgdGFyZ2V0IFVSTC5cbiAgICAgKiBAcGFyYW0gY29uZmlnIFRoZSBjYWxsYmFjayBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBSZXF1ZXN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICAgKi9cblx0cG9zdEFzeW5jKHVybDogc3RyaW5nLCBjb25maWc6IEh0dHBDbGllbnRBc3luY0NvbmZpZywgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld1VybCA9IGJ1aWxkVXJsKHVybCwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBjcmVhdGVIdHRwUmVzcG9uc2VDYWxsYmFjayhcblx0XHRcdGh0dHBDbGllbnQsXG5cdFx0XHRjb25maWcuc3VjY2Vzcyxcblx0XHRcdGNvbmZpZy5lcnJvcixcblx0XHRcdGNvbmZpZy5jYW5jZWxcblx0XHQpO1xuXHRcdGlmIChvcHRpb25zKSB7XG5cdFx0XHRodHRwQ2xpZW50LnBvc3RBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLCBjYWxsYmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGh0dHBDbGllbnQucG9zdEFzeW5jKG5ld1VybCwgSlNPTi5zdHJpbmdpZnkoe30pLCBjYWxsYmFjayk7XG5cdFx0fVxuXHR9O1xuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgYW4gYXN5bmNocm9ub3VzIEhUVFAgUFVUIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHVybCBUaGUgdGFyZ2V0IFVSTC5cbiAgICAgKiBAcGFyYW0gY29uZmlnIFRoZSBjYWxsYmFjayBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBSZXF1ZXN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICAgKi9cblx0cHV0QXN5bmModXJsOiBzdHJpbmcsIGNvbmZpZzogSHR0cENsaWVudEFzeW5jQ29uZmlnLCBvcHRpb25zPzogSHR0cENsaWVudFJlcXVlc3RPcHRpb25zKTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VXJsID0gYnVpbGRVcmwodXJsLCBvcHRpb25zKTtcblx0XHRjb25zdCBjYWxsYmFjayA9IGNyZWF0ZUh0dHBSZXNwb25zZUNhbGxiYWNrKFxuXHRcdFx0aHR0cENsaWVudCxcblx0XHRcdGNvbmZpZy5zdWNjZXNzLFxuXHRcdFx0Y29uZmlnLmVycm9yLFxuXHRcdFx0Y29uZmlnLmNhbmNlbFxuXHRcdCk7XG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGh0dHBDbGllbnQucHV0QXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeShvcHRpb25zKSwgY2FsbGJhY2spO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRodHRwQ2xpZW50LnB1dEFzeW5jKG5ld1VybCwgSlNPTi5zdHJpbmdpZnkoe30pLCBjYWxsYmFjayk7XG5cdFx0fVxuXHR9O1xuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgYW4gYXN5bmNocm9ub3VzIEhUVFAgUEFUQ0ggcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgVVJMLlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNhbGxiYWNrIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFJlcXVlc3QgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAqL1xuXHRwYXRjaEFzeW5jKHVybDogc3RyaW5nLCBjb25maWc6IEh0dHBDbGllbnRBc3luY0NvbmZpZywgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld1VybCA9IGJ1aWxkVXJsKHVybCwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBjcmVhdGVIdHRwUmVzcG9uc2VDYWxsYmFjayhcblx0XHRcdGh0dHBDbGllbnQsXG5cdFx0XHRjb25maWcuc3VjY2Vzcyxcblx0XHRcdGNvbmZpZy5lcnJvcixcblx0XHRcdGNvbmZpZy5jYW5jZWxcblx0XHQpO1xuXHRcdGlmIChvcHRpb25zKSB7XG5cdFx0XHRodHRwQ2xpZW50LnBhdGNoQXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeShvcHRpb25zKSwgY2FsbGJhY2spO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRodHRwQ2xpZW50LnBhdGNoQXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeSh7fSksIGNhbGxiYWNrKTtcblx0XHR9XG5cdH07XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhbiBhc3luY2hyb25vdXMgSFRUUCBERUxFVEUgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgVVJMLlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNhbGxiYWNrIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFJlcXVlc3QgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAqL1xuXHRkZWxldGVBc3luYyh1cmw6IHN0cmluZywgY29uZmlnOiBIdHRwQ2xpZW50QXN5bmNDb25maWcsIG9wdGlvbnM/OiBIdHRwQ2xpZW50UmVxdWVzdE9wdGlvbnMpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdVcmwgPSBidWlsZFVybCh1cmwsIG9wdGlvbnMpO1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gY3JlYXRlSHR0cFJlc3BvbnNlQ2FsbGJhY2soXG5cdFx0XHRodHRwQ2xpZW50LFxuXHRcdFx0Y29uZmlnLnN1Y2Nlc3MsXG5cdFx0XHRjb25maWcuZXJyb3IsXG5cdFx0XHRjb25maWcuY2FuY2VsXG5cdFx0KTtcblx0XHRpZiAob3B0aW9ucykge1xuXHRcdFx0aHR0cENsaWVudC5kZWxldGVBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLCBjYWxsYmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGh0dHBDbGllbnQuZGVsZXRlQXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeSh7fSksIGNhbGxiYWNrKTtcblx0XHR9XG5cdH07XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhbiBhc3luY2hyb25vdXMgSFRUUCBIRUFEIHJlcXVlc3QuXG4gICAgICogQHBhcmFtIHVybCBUaGUgdGFyZ2V0IFVSTC5cbiAgICAgKiBAcGFyYW0gY29uZmlnIFRoZSBjYWxsYmFjayBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBSZXF1ZXN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICAgKi9cblx0aGVhZEFzeW5jKHVybDogc3RyaW5nLCBjb25maWc6IEh0dHBDbGllbnRBc3luY0NvbmZpZywgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld1VybCA9IGJ1aWxkVXJsKHVybCwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBjcmVhdGVIdHRwUmVzcG9uc2VDYWxsYmFjayhcblx0XHRcdGh0dHBDbGllbnQsXG5cdFx0XHRjb25maWcuc3VjY2Vzcyxcblx0XHRcdGNvbmZpZy5lcnJvcixcblx0XHRcdGNvbmZpZy5jYW5jZWxcblx0XHQpO1xuXHRcdGlmIChvcHRpb25zKSB7XG5cdFx0XHRodHRwQ2xpZW50LmhlYWRBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLCBjYWxsYmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGh0dHBDbGllbnQuaGVhZEFzeW5jKG5ld1VybCwgSlNPTi5zdHJpbmdpZnkoe30pLCBjYWxsYmFjayk7XG5cdFx0fVxuXHR9O1xuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgYW4gYXN5bmNocm9ub3VzIEhUVFAgVFJBQ0UgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgVVJMLlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNhbGxiYWNrIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFJlcXVlc3QgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAqL1xuXHR0cmFjZUFzeW5jKHVybDogc3RyaW5nLCBjb25maWc6IEh0dHBDbGllbnRBc3luY0NvbmZpZywgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld1VybCA9IGJ1aWxkVXJsKHVybCwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBjcmVhdGVIdHRwUmVzcG9uc2VDYWxsYmFjayhcblx0XHRcdGh0dHBDbGllbnQsXG5cdFx0XHRjb25maWcuc3VjY2Vzcyxcblx0XHRcdGNvbmZpZy5lcnJvcixcblx0XHRcdGNvbmZpZy5jYW5jZWxcblx0XHQpO1xuXHRcdGlmIChvcHRpb25zKSB7XG5cdFx0XHRodHRwQ2xpZW50LnRyYWNlQXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeShvcHRpb25zKSwgY2FsbGJhY2spO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRodHRwQ2xpZW50LnRyYWNlQXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeSh7fSksIGNhbGxiYWNrKTtcblx0XHR9XG5cdH07XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWF0ZXMgdGhlIGV4ZWN1dGlvbiBvZiBxdWV1ZWQgYXN5bmNocm9ub3VzIHJlcXVlc3RzIChkZXBlbmRpbmcgb24gdGhlIHVuZGVybHlpbmcgSmF2YSBjbGllbnQncyB0aHJlYWRpbmcgbW9kZWwpLlxuICAgICAqL1xuXHRleGVjdXRlKCk6IHZvaWQge1xuXHRcdGh0dHBDbGllbnQuZXhlY3V0ZSgpO1xuXHR9O1xufVxuXG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gcmV0cmlldmUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGFzeW5jaHJvbm91cyBjbGllbnQuXG4gKiBAcmV0dXJucyBBIG5ldyBpbnN0YW5jZSBvZiBIdHRwQXN5bmNDbGllbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnN0YW5jZSgpOiBIdHRwQXN5bmNDbGllbnQge1xuXHRyZXR1cm4gbmV3IEh0dHBBc3luY0NsaWVudCgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmF0aXZlIEphdmEgY2FsbGJhY2sgb2JqZWN0IHRoYXQgd3JhcHMgdGhlIEphdmFTY3JpcHQgc3VjY2VzcywgZXJyb3IsIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxuICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSB1bmRlcmx5aW5nIEphdmEgSFRUUCBjbGllbnQgaW5zdGFuY2UgdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIGNhbGxiYWNrIG9iamVjdC5cbiAqIEBwYXJhbSBodHRwQ2xpZW50IFRoZSBKYXZhIEh0dHBDbGllbnRBc3luY0ZhY2FkZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgSlMgY29kZSBzdHJpbmcgZm9yIHN1Y2Nlc3MuXG4gKiBAcGFyYW0gZXJyb3JDYWxsYmFjayBKUyBjb2RlIHN0cmluZyBmb3IgZXJyb3IuXG4gKiBAcGFyYW0gY2FuY2VsQ2FsbGJhY2sgSlMgY29kZSBzdHJpbmcgZm9yIGNhbmNlbC5cbiAqIEByZXR1cm5zIEEgSmF2YSBjYWxsYmFjayBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh0dHBSZXNwb25zZUNhbGxiYWNrKGh0dHBDbGllbnQ6IGFueSwgc3VjY2Vzc0NhbGxiYWNrOiBzdHJpbmcsIGVycm9yQ2FsbGJhY2s/OiBzdHJpbmcsIGNhbmNlbENhbGxiYWNrPzogc3RyaW5nKTogYW55IHtcblx0cmV0dXJuIGh0dHBDbGllbnQuY3JlYXRlQ2FsbGJhY2soXG5cdFx0Y3JlYXRlU3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxsYmFjayksXG5cdFx0Y3JlYXRlRXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKSxcblx0XHRjcmVhdGVDYW5jZWxDYWxsYmFjayhjYW5jZWxDYWxsYmFjaylcblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHJhdyBKYXZhU2NyaXB0IHN0cmluZyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIEpWTSBlbnZpcm9ubWVudCB1cG9uIHN1Y2Nlc3NmdWwgcmVxdWVzdCBjb21wbGV0aW9uLlxuICogVGhpcyBzdHJpbmcgaGFuZGxlcyBwYXJzaW5nIHRoZSBKYXZhIEhUVFAgcmVzcG9uc2Ugb2JqZWN0IGFuZCBleGVjdXRpbmcgdGhlIHVzZXIncyBkZWZpbmVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSB1c2VyLXByb3ZpZGVkIHN1Y2Nlc3MgY2FsbGJhY2sgZnVuY3Rpb24gY29kZSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgY29tcGxleCBKYXZhU2NyaXB0IHN0cmluZyBmb3IgdGhlIHN1Y2Nlc3MgaGFuZGxlci5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3VjY2Vzc0NhbGxiYWNrKGNhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvLyBOb3RlOiBUaGlzIHN0cmluZyB1c2VzIEphdmEgdXRpbGl0eSBjbGFzc2VzIChvcmcuYXBhY2hlLmNvbW1vbnMuaW8uSU9VdGlscykgYW5kIGNvbnRleHQgdmFyaWFibGVzIFxuICAgIC8vIChfX2NvbnRleHQpIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiB0aGUgc3BlY2lmaWMgSlZNIGVudmlyb25tZW50LlxuICAgIFxuICAgIC8vIFRoZSBzdHJ1Y3R1cmUgbWFwcyB0aGUgSmF2YSBIVFRQIFJlc3BvbnNlIG9iamVjdCBpbnRvIHRoZSBzdGFuZGFyZCBIdHRwQ2xpZW50UmVzcG9uc2UgaW50ZXJmYWNlLlxuXHRyZXR1cm4gXCIoZnVuY3Rpb24oaHR0cFJlc3BvbnNlLCBpc0JpbmFyeSwgY29udGV4dCkge1xcblwiXG5cdFx0KyBcInZhciByZXNwb25zZSA9IHt9O1xcblwiXG5cdFx0KyBcInJlc3BvbnNlLnN0YXR1c0NvZGUgPSBodHRwUmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKTtcXG5cIlxuXHRcdCsgXCJyZXNwb25zZS5zdGF0dXNNZXNzYWdlID0gaHR0cFJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRSZWFzb25QaHJhc2UoKTtcXG5cIlxuXHRcdCsgXCJyZXNwb25zZS5wcm90b2NvbCA9IGh0dHBSZXNwb25zZS5nZXRQcm90b2NvbFZlcnNpb24oKTtcXG5cIlxuXHRcdCsgXCJyZXNwb25zZS5iaW5hcnkgPSBpc0JpbmFyeTtcXG5cIlxuXG5cdFx0KyBcInZhciBoZWFkZXJzID0gaHR0cFJlc3BvbnNlLmdldEFsbEhlYWRlcnMoKTtcXG5cIlxuXHRcdCsgXCJyZXNwb25zZS5oZWFkZXJzID0gW107XFxuXCJcblx0XHQrIFwiZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArKykge1xcblwiXG5cdFx0KyBcIiAgICByZXNwb25zZS5oZWFkZXJzLnB1c2goe1xcblwiXG5cdFx0KyBcIiAgICAgICAgbmFtZTogaGVhZGVyc1tpXS5nZXROYW1lKCksXFxuXCJcblx0XHQrIFwiICAgICAgICB2YWx1ZTogaGVhZGVyc1tpXS5nZXRWYWx1ZSgpXFxuXCJcblx0XHQrIFwiICAgIH0pO1xcblwiXG5cdFx0KyBcIn1cXG5cIlxuXG5cdFx0KyBcInZhciBlbnRpdHkgPSBodHRwUmVzcG9uc2UuZ2V0RW50aXR5KCk7XFxuXCJcblx0XHQrIFwiaWYgKGVudGl0eSkge1xcblwiXG5cdFx0KyBcIiAgICB2YXIgaW5wdXRTdHJlYW0gPSBlbnRpdHkuZ2V0Q29udGVudCgpO1xcblwiXG5cdFx0KyBcIiAgICBpZiAoaXNCaW5hcnkpIHtcXG5cIlxuXHRcdCsgXCIgICAgICAgIC8vIFVzZXMgSmF2YSBJT1V0aWxzIHRvIHJlYWQgYmluYXJ5IGRhdGFcXG5cIlxuXHRcdCsgXCIgICAgICAgIHJlc3BvbnNlLmRhdGEgPSBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uSU9VdGlscy50b0J5dGVBcnJheShpbnB1dFN0cmVhbSk7XFxuXCJcblx0XHQrIFwiICAgIH0gZWxzZSB7XFxuXCJcblx0XHQrIFwiICAgICAgICAvLyBVc2VzIEphdmEgSU9VdGlscyB0byByZWFkIHRleHQgZGF0YVxcblwiXG5cdFx0KyBcIiAgICAgICAgcmVzcG9uc2UudGV4dCA9IG9yZy5hcGFjaGUuY29tbW9ucy5pby5JT1V0aWxzLnRvU3RyaW5nKGlucHV0U3RyZWFtKTtcXG5cIlxuXHRcdCsgXCIgICAgfVxcblwiXG5cdFx0KyBcIn1cXG5cIlxuXG5cdFx0KyBcIihcIiArIGNhbGxiYWNrICsgXCIpKHJlc3BvbnNlLCBKU09OLnBhcnNlKGNvbnRleHQpKTtcXG5cIlxuXHRcdCsgXCJ9KShfX2NvbnRleHQuZ2V0KCdyZXNwb25zZScpLCBfX2NvbnRleHQuZ2V0KCdodHRwQ2xpZW50UmVxdWVzdE9wdGlvbnMnKS5pc0JpbmFyeSgpLCBfX2NvbnRleHQuZ2V0KCdodHRwQ2xpZW50UmVxdWVzdE9wdGlvbnMnKS5nZXRDb250ZXh0KCkpO1xcblwiO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgcmF3IEphdmFTY3JpcHQgc3RyaW5nIGZvciB0aGUgZXJyb3IgY2FsbGJhY2suXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIHVzZXItcHJvdmlkZWQgZXJyb3IgY2FsbGJhY2sgZnVuY3Rpb24gY29kZSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgSmF2YVNjcmlwdCBzdHJpbmcgZm9yIHRoZSBlcnJvciBoYW5kbGVyLCBvciB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2FsbGJhY2soY2FsbGJhY2s/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoY2FsbGJhY2spIHtcblx0XHRyZXR1cm4gXCIoXCIgKyBjYWxsYmFjayArIFwiKShfX2NvbnRleHQuZ2V0KCdleGNlcHRpb24nKSlcIjtcblx0fVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSByYXcgSmF2YVNjcmlwdCBzdHJpbmcgZm9yIHRoZSBjYW5jZWwgY2FsbGJhY2suXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIHVzZXItcHJvdmlkZWQgY2FuY2VsIGNhbGxiYWNrIGZ1bmN0aW9uIGNvZGUgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIEphdmFTY3JpcHQgc3RyaW5nIGZvciB0aGUgY2FuY2VsIGhhbmRsZXIsIG9yIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FuY2VsQ2FsbGJhY2soY2FsbGJhY2s/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoY2FsbGJhY2spIHtcblx0XHRyZXR1cm4gXCIoXCIgKyBjYWxsYmFjayArIFwiKSgpXCI7XG5cdH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZmluYWwgVVJMIGJ5IGFwcGVuZGluZyBhbGwgcXVlcnkgcGFyYW1ldGVycyBkZWZpbmVkIGluIG9wdGlvbnMucGFyYW1zLlxuICogVGhlIHBhcmFtZXRlcnMgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIG9wdGlvbnMgb2JqZWN0IGFzIHRoZXkgYXJlIGZvciB0aGUgc3luY2hyb25vdXMgY2xpZW50LFxuICogc2luY2UgdGhlIG9wdGlvbnMgYXJlIHBhc3NlZCBhcyBKU09OIHN0cmluZyB0byB0aGUgZmFjYWRlIGFueXdheS5cbiAqIEBwYXJhbSB1cmwgVGhlIGJhc2UgVVJMLlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIHJlcXVlc3Qgb3B0aW9ucyB3aGljaCBtYXkgY29udGFpbiBgcGFyYW1zYC5cbiAqIEByZXR1cm5zIFRoZSBVUkwgd2l0aCBhcHBlbmRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxuICovXG5mdW5jdGlvbiBidWlsZFVybCh1cmw6IHN0cmluZywgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IHN0cmluZyB7XG5cdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zLnBhcmFtcyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMucGFyYW1zID09PSBudWxsIHx8IG9wdGlvbnMucGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiB1cmw7XG5cdH1cblx0bGV0IG5ld1VybCA9IHVybDtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLnBhcmFtcy5sZW5ndGg7IGkgKyspIHtcbiAgICAgICAgY29uc3QgcGFyYW0gPSBvcHRpb25zLnBhcmFtc1tpXTtcblx0XHRpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgVVJMIGFscmVhZHkgY29udGFpbnMgJz8nIGFuZCB1c2UgJyYnIGlmIHNvIChpbXByb3ZlcyByb2J1c3RuZXNzKVxuICAgICAgICAgICAgaWYgKG5ld1VybC5pbmNsdWRlcygnPycpKSB7XG4gICAgICAgICAgICAgICAgbmV3VXJsICs9ICcmJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3VXJsICs9ICc/JztcbiAgICAgICAgICAgIH1cblx0XHRcdG5ld1VybCArPSBwYXJhbS5uYW1lICsgJz0nICsgcGFyYW0udmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ld1VybCArPSAnJicgKyBwYXJhbS5uYW1lICsgJz0nICsgcGFyYW0udmFsdWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBuZXdVcmw7XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0geyBIdHRwQXN5bmNDbGllbnQsIGdldEluc3RhbmNlIH07XG59Il0sCiAgIm1hcHBpbmdzIjogIkFBMkdBLE1BQU0sd0JBQXdCLEtBQUssS0FBSyxpRUFBaUU7QUFHekcsTUFBTSxxQkFBcUIsS0FBSyxLQUFLLDREQUE0RDtBQUdqRyxNQUFNLGFBQWEsbUJBQW1CLFFBQVEsc0JBQXNCLEtBQUs7QUFPbEUsTUFBTSxnQkFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVE1QixTQUFTLEtBQWEsUUFBK0IsU0FBMEM7QUFDOUYsVUFBTSxTQUFTLFNBQVMsS0FBSyxPQUFPO0FBQ3BDLFVBQU0sV0FBVztBQUFBLE1BQ2hCO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsSUFDUjtBQUNBLFFBQUksU0FBUztBQUNaLGlCQUFXLFNBQVMsUUFBUSxLQUFLLFVBQVUsT0FBTyxHQUFHLFFBQVE7QUFBQSxJQUM5RCxPQUFPO0FBQ04saUJBQVcsU0FBUyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsR0FBRyxRQUFRO0FBQUEsSUFDekQ7QUFBQSxFQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxVQUFVLEtBQWEsUUFBK0IsU0FBMEM7QUFDL0YsVUFBTSxTQUFTLFNBQVMsS0FBSyxPQUFPO0FBQ3BDLFVBQU0sV0FBVztBQUFBLE1BQ2hCO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsSUFDUjtBQUNBLFFBQUksU0FBUztBQUNaLGlCQUFXLFVBQVUsUUFBUSxLQUFLLFVBQVUsT0FBTyxHQUFHLFFBQVE7QUFBQSxJQUMvRCxPQUFPO0FBQ04saUJBQVcsVUFBVSxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsR0FBRyxRQUFRO0FBQUEsSUFDMUQ7QUFBQSxFQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxTQUFTLEtBQWEsUUFBK0IsU0FBMEM7QUFDOUYsVUFBTSxTQUFTLFNBQVMsS0FBSyxPQUFPO0FBQ3BDLFVBQU0sV0FBVztBQUFBLE1BQ2hCO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsSUFDUjtBQUNBLFFBQUksU0FBUztBQUNaLGlCQUFXLFNBQVMsUUFBUSxLQUFLLFVBQVUsT0FBTyxHQUFHLFFBQVE7QUFBQSxJQUM5RCxPQUFPO0FBQ04saUJBQVcsU0FBUyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsR0FBRyxRQUFRO0FBQUEsSUFDekQ7QUFBQSxFQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxXQUFXLEtBQWEsUUFBK0IsU0FBMEM7QUFDaEcsVUFBTSxTQUFTLFNBQVMsS0FBSyxPQUFPO0FBQ3BDLFVBQU0sV0FBVztBQUFBLE1BQ2hCO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsSUFDUjtBQUNBLFFBQUksU0FBUztBQUNaLGlCQUFXLFdBQVcsUUFBUSxLQUFLLFVBQVUsT0FBTyxHQUFHLFFBQVE7QUFBQSxJQUNoRSxPQUFPO0FBQ04saUJBQVcsV0FBVyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsR0FBRyxRQUFRO0FBQUEsSUFDM0Q7QUFBQSxFQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxZQUFZLEtBQWEsUUFBK0IsU0FBMEM7QUFDakcsVUFBTSxTQUFTLFNBQVMsS0FBSyxPQUFPO0FBQ3BDLFVBQU0sV0FBVztBQUFBLE1BQ2hCO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsSUFDUjtBQUNBLFFBQUksU0FBUztBQUNaLGlCQUFXLFlBQVksUUFBUSxLQUFLLFVBQVUsT0FBTyxHQUFHLFFBQVE7QUFBQSxJQUNqRSxPQUFPO0FBQ04saUJBQVcsWUFBWSxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsR0FBRyxRQUFRO0FBQUEsSUFDNUQ7QUFBQSxFQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxVQUFVLEtBQWEsUUFBK0IsU0FBMEM7QUFDL0YsVUFBTSxTQUFTLFNBQVMsS0FBSyxPQUFPO0FBQ3BDLFVBQU0sV0FBVztBQUFBLE1BQ2hCO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsSUFDUjtBQUNBLFFBQUksU0FBUztBQUNaLGlCQUFXLFVBQVUsUUFBUSxLQUFLLFVBQVUsT0FBTyxHQUFHLFFBQVE7QUFBQSxJQUMvRCxPQUFPO0FBQ04saUJBQVcsVUFBVSxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsR0FBRyxRQUFRO0FBQUEsSUFDMUQ7QUFBQSxFQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxXQUFXLEtBQWEsUUFBK0IsU0FBMEM7QUFDaEcsVUFBTSxTQUFTLFNBQVMsS0FBSyxPQUFPO0FBQ3BDLFVBQU0sV0FBVztBQUFBLE1BQ2hCO0FBQUEsTUFDQSxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsSUFDUjtBQUNBLFFBQUksU0FBUztBQUNaLGlCQUFXLFdBQVcsUUFBUSxLQUFLLFVBQVUsT0FBTyxHQUFHLFFBQVE7QUFBQSxJQUNoRSxPQUFPO0FBQ04saUJBQVcsV0FBVyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsR0FBRyxRQUFRO0FBQUEsSUFDM0Q7QUFBQSxFQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxVQUFnQjtBQUNmLGVBQVcsUUFBUTtBQUFBLEVBQ3BCO0FBQ0Q7QUFNTyxTQUFTLGNBQStCO0FBQzlDLFNBQU8sSUFBSSxnQkFBZ0I7QUFDNUI7QUFBQztBQVdELFNBQVMsMkJBQTJCQSxhQUFpQixpQkFBeUIsZUFBd0IsZ0JBQThCO0FBQ25JLFNBQU9BLFlBQVc7QUFBQSxJQUNqQixzQkFBc0IsZUFBZTtBQUFBLElBQ3JDLG9CQUFvQixhQUFhO0FBQUEsSUFDakMscUJBQXFCLGNBQWM7QUFBQSxFQUNwQztBQUNEO0FBUUEsU0FBUyxzQkFBc0IsVUFBMEI7QUFLeEQsU0FBTyxtNkJBNEJFLFdBQVc7QUFFckI7QUFPQSxTQUFTLG9CQUFvQixVQUF1QztBQUNuRSxNQUFJLFVBQVU7QUFDYixXQUFPLE1BQU0sV0FBVztBQUFBLEVBQ3pCO0FBQ0csU0FBTztBQUNYO0FBT0EsU0FBUyxxQkFBcUIsVUFBdUM7QUFDcEUsTUFBSSxVQUFVO0FBQ2IsV0FBTyxNQUFNLFdBQVc7QUFBQSxFQUN6QjtBQUNHLFNBQU87QUFDWDtBQVVBLFNBQVMsU0FBUyxLQUFhLFNBQTRDO0FBQzFFLE1BQUksWUFBWSxVQUFhLFlBQVksUUFBUSxRQUFRLFdBQVcsVUFBYSxRQUFRLFdBQVcsUUFBUSxRQUFRLE9BQU8sV0FBVyxHQUFHO0FBQ3hJLFdBQU87QUFBQSxFQUNSO0FBQ0EsTUFBSSxTQUFTO0FBQ2IsV0FBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLE9BQU8sUUFBUSxLQUFNO0FBQzFDLFVBQU0sUUFBUSxRQUFRLE9BQU8sQ0FBQztBQUNwQyxRQUFJLE1BQU0sR0FBRztBQUVILFVBQUksT0FBTyxTQUFTLEdBQUcsR0FBRztBQUN0QixrQkFBVTtBQUFBLE1BQ2QsT0FBTztBQUNILGtCQUFVO0FBQUEsTUFDZDtBQUNULGdCQUFVLE1BQU0sT0FBTyxNQUFNLE1BQU07QUFBQSxJQUNwQyxPQUFPO0FBQ04sZ0JBQVUsTUFBTSxNQUFNLE9BQU8sTUFBTSxNQUFNO0FBQUEsSUFDMUM7QUFBQSxFQUNEO0FBQ0EsU0FBTztBQUNSO0FBR0EsSUFBSSxPQUFPLFdBQVcsYUFBYTtBQUVsQyxTQUFPLFVBQVUsRUFBRSxpQkFBaUIsWUFBWTtBQUNqRDsiLAogICJuYW1lcyI6IFsiaHR0cENsaWVudCJdCn0K