@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,489 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var jsonpath_exports = {};
19
+ __export(jsonpath_exports, {
20
+ JSONPath: () => JSONPath,
21
+ default: () => jsonpath_default
22
+ });
23
+ module.exports = __toCommonJS(jsonpath_exports);
24
+ const globalEval = eval;
25
+ const allowedResultTypes = ["value", "path", "pointer", "parent", "parentProperty", "all"];
26
+ const { hasOwnProperty: hasOwnProp } = Object.prototype;
27
+ const moveToAnotherArray = function(source, target, conditionCb) {
28
+ const il = source.length;
29
+ for (let i = 0; i < il; i++) {
30
+ const item = source[i];
31
+ if (conditionCb(item)) {
32
+ target.push(source.splice(i--, 1)[0]);
33
+ }
34
+ }
35
+ };
36
+ const vm = {
37
+ /**
38
+ * @param {string} expr Expression to evaluate
39
+ * @param {Object} context Object whose items will be added to evaluation
40
+ * @returns {*} Result of evaluated code
41
+ */
42
+ runInNewContext(expr, context) {
43
+ const keys = Object.keys(context);
44
+ const funcs = [];
45
+ moveToAnotherArray(keys, funcs, (key) => {
46
+ return typeof context[key] === "function";
47
+ });
48
+ const code = funcs.reduce((s, func) => {
49
+ let fString = context[func].toString();
50
+ if (!/function/.exec(fString)) {
51
+ fString = "function " + fString;
52
+ }
53
+ return "var " + func + "=" + fString + ";" + s;
54
+ }, "") + keys.reduce((s, vr) => {
55
+ return "var " + vr + "=" + JSON.stringify(context[vr]).replace(
56
+ // http://www.thespanner.co.uk/2011/07/25/the-json-specification-is-now-wrong/
57
+ /\u2028|\u2029/g,
58
+ (m) => {
59
+ return "\\u202" + (m === "\u2028" ? "8" : "9");
60
+ }
61
+ ) + ";" + s;
62
+ }, expr);
63
+ return globalEval(code);
64
+ }
65
+ };
66
+ function push(arr, item) {
67
+ arr = arr.slice();
68
+ arr.push(item);
69
+ return arr;
70
+ }
71
+ function unshift(item, arr) {
72
+ arr = arr.slice();
73
+ arr.unshift(item);
74
+ return arr;
75
+ }
76
+ var NewError = function(value) {
77
+ const error = Error.call(this, 'JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)');
78
+ this.message = error.message;
79
+ this.stack = error.stack;
80
+ this.avoidNew = true;
81
+ this.value = value;
82
+ this.name = "NewError";
83
+ };
84
+ NewError.prototype = Object.create(Error.prototype);
85
+ NewError.prototype.constructor = NewError;
86
+ function JSONPath(opts, expr, obj, callback, otherTypeCallback) {
87
+ if (!(this instanceof JSONPath)) {
88
+ try {
89
+ return new JSONPath(opts, expr, obj, callback, otherTypeCallback);
90
+ } catch (e) {
91
+ if (!e.avoidNew) {
92
+ throw e;
93
+ }
94
+ return e.value;
95
+ }
96
+ }
97
+ if (typeof opts === "string") {
98
+ otherTypeCallback = callback;
99
+ callback = obj;
100
+ obj = expr;
101
+ expr = opts;
102
+ opts = {};
103
+ }
104
+ opts = opts || {};
105
+ const objArgs = hasOwnProp.call(opts, "json") && hasOwnProp.call(opts, "path");
106
+ this.json = opts.json || obj;
107
+ this.path = opts.path || expr;
108
+ this.resultType = opts.resultType && opts.resultType.toLowerCase() || "value";
109
+ this.flatten = opts.flatten || false;
110
+ this.wrap = hasOwnProp.call(opts, "wrap") ? opts.wrap : true;
111
+ this.sandbox = opts.sandbox || {};
112
+ this.preventEval = opts.preventEval || false;
113
+ this.parent = opts.parent || null;
114
+ this.parentProperty = opts.parentProperty || null;
115
+ this.callback = opts.callback || callback || null;
116
+ this.otherTypeCallback = opts.otherTypeCallback || otherTypeCallback || function() {
117
+ throw new Error("You must supply an otherTypeCallback callback option with the @other() operator.");
118
+ };
119
+ if (opts.autostart !== false) {
120
+ const ret = this.evaluate({
121
+ path: objArgs ? opts.path : expr,
122
+ json: objArgs ? opts.json : obj
123
+ });
124
+ if (!ret || typeof ret !== "object") {
125
+ throw new NewError(ret);
126
+ }
127
+ return ret;
128
+ }
129
+ }
130
+ JSONPath.prototype = Object.create(Object.prototype);
131
+ JSONPath.prototype.constructor = JSONPath;
132
+ JSONPath.prototype.evaluate = function(expr, json, callback, otherTypeCallback) {
133
+ const that = this;
134
+ let currParent = this.parent, currParentProperty = this.parentProperty;
135
+ let { flatten, wrap } = this;
136
+ this.currResultType = this.resultType;
137
+ this.currPreventEval = this.preventEval;
138
+ this.currSandbox = this.sandbox;
139
+ callback = callback || this.callback;
140
+ this.currOtherTypeCallback = otherTypeCallback || this.otherTypeCallback;
141
+ json = json || this.json;
142
+ expr = expr || this.path;
143
+ if (expr && typeof expr === "object") {
144
+ if (!expr.path) {
145
+ throw new Error('You must supply a "path" property when providing an object argument to JSONPath.evaluate().');
146
+ }
147
+ json = hasOwnProp.call(expr, "json") ? expr.json : json;
148
+ flatten = hasOwnProp.call(expr, "flatten") ? expr.flatten : flatten;
149
+ this.currResultType = hasOwnProp.call(expr, "resultType") ? expr.resultType : this.currResultType;
150
+ this.currSandbox = hasOwnProp.call(expr, "sandbox") ? expr.sandbox : this.currSandbox;
151
+ wrap = hasOwnProp.call(expr, "wrap") ? expr.wrap : wrap;
152
+ this.currPreventEval = hasOwnProp.call(expr, "preventEval") ? expr.preventEval : this.currPreventEval;
153
+ callback = hasOwnProp.call(expr, "callback") ? expr.callback : callback;
154
+ this.currOtherTypeCallback = hasOwnProp.call(expr, "otherTypeCallback") ? expr.otherTypeCallback : this.currOtherTypeCallback;
155
+ currParent = hasOwnProp.call(expr, "parent") ? expr.parent : currParent;
156
+ currParentProperty = hasOwnProp.call(expr, "parentProperty") ? expr.parentProperty : currParentProperty;
157
+ expr = expr.path;
158
+ }
159
+ currParent = currParent || null;
160
+ currParentProperty = currParentProperty || null;
161
+ if (Array.isArray(expr)) {
162
+ expr = JSONPath.toPathString(expr);
163
+ }
164
+ if (!expr || !json || allowedResultTypes.indexOf(this.currResultType) < 0) {
165
+ return void 0;
166
+ }
167
+ this._obj = json;
168
+ const exprList = JSONPath.toPathArray(expr);
169
+ if (exprList[0] === "$" && exprList.length > 1) {
170
+ exprList.shift();
171
+ }
172
+ this._hasParentSelector = null;
173
+ const result = this._trace(exprList, json, ["$"], currParent, currParentProperty, callback).filter(function(ea) {
174
+ return ea && !ea.isParentSelector;
175
+ });
176
+ if (!result.length) {
177
+ return wrap ? [] : void 0;
178
+ }
179
+ if (result.length === 1 && !wrap && !Array.isArray(result[0].value)) {
180
+ return this._getPreferredOutput(result[0]);
181
+ }
182
+ return result.reduce(function(rslt, ea) {
183
+ const valOrPath = that._getPreferredOutput(ea);
184
+ if (flatten && Array.isArray(valOrPath)) {
185
+ rslt = rslt.concat(valOrPath);
186
+ } else {
187
+ rslt.push(valOrPath);
188
+ }
189
+ return rslt;
190
+ }, []);
191
+ };
192
+ JSONPath.prototype._getPreferredOutput = function(ea) {
193
+ const resultType = this.currResultType;
194
+ switch (resultType) {
195
+ default:
196
+ throw new TypeError("Unknown result type");
197
+ case "all":
198
+ ea.pointer = JSONPath.toPointer(ea.path);
199
+ ea.path = typeof ea.path === "string" ? ea.path : JSONPath.toPathString(ea.path);
200
+ return ea;
201
+ case "value":
202
+ case "parent":
203
+ case "parentProperty":
204
+ return ea[resultType];
205
+ case "path":
206
+ return JSONPath.toPathString(ea[resultType]);
207
+ case "pointer":
208
+ return JSONPath.toPointer(ea.path);
209
+ }
210
+ };
211
+ JSONPath.prototype._handleCallback = function(fullRetObj, callback, type) {
212
+ if (callback) {
213
+ const preferredOutput = this._getPreferredOutput(fullRetObj);
214
+ fullRetObj.path = typeof fullRetObj.path === "string" ? fullRetObj.path : JSONPath.toPathString(fullRetObj.path);
215
+ callback(preferredOutput, type, fullRetObj);
216
+ }
217
+ };
218
+ JSONPath.prototype._trace = function(expr, val, path, parent, parentPropName, callback, literalPriority) {
219
+ let retObj;
220
+ const that = this;
221
+ if (!expr.length) {
222
+ retObj = { path, value: val, parent, parentProperty: parentPropName };
223
+ this._handleCallback(retObj, callback, "value");
224
+ return retObj;
225
+ }
226
+ const loc = expr[0], x = expr.slice(1);
227
+ const ret = [];
228
+ function addRet(elems) {
229
+ if (Array.isArray(elems)) {
230
+ elems.forEach((t) => {
231
+ ret.push(t);
232
+ });
233
+ } else {
234
+ ret.push(elems);
235
+ }
236
+ }
237
+ if ((typeof loc !== "string" || literalPriority) && val && hasOwnProp.call(val, loc)) {
238
+ addRet(this._trace(x, val[loc], push(path, loc), val, loc, callback));
239
+ } else if (loc === "*") {
240
+ this._walk(loc, x, val, path, parent, parentPropName, callback, function(m, l, x2, v, p, par, pr, cb) {
241
+ addRet(that._trace(unshift(m, x2), v, p, par, pr, cb, true));
242
+ });
243
+ } else if (loc === "..") {
244
+ addRet(this._trace(x, val, path, parent, parentPropName, callback));
245
+ this._walk(loc, x, val, path, parent, parentPropName, callback, function(m, l, x2, v, p, par, pr, cb) {
246
+ if (typeof v[m] === "object") {
247
+ addRet(that._trace(unshift(l, x2), v[m], push(p, m), v, m, cb));
248
+ }
249
+ });
250
+ } else if (loc === "^") {
251
+ this._hasParentSelector = true;
252
+ return path.length ? {
253
+ path: path.slice(0, -1),
254
+ expr: x,
255
+ isParentSelector: true
256
+ } : [];
257
+ } else if (loc === "~") {
258
+ retObj = { path: push(path, loc), value: parentPropName, parent, parentProperty: null };
259
+ this._handleCallback(retObj, callback, "property");
260
+ return retObj;
261
+ } else if (loc === "$") {
262
+ addRet(this._trace(x, val, path, null, null, callback));
263
+ } else if (/^(-?\d*):(-?\d*):?(\d*)$/.test(loc)) {
264
+ addRet(this._slice(loc, x, val, path, parent, parentPropName, callback));
265
+ } else if (loc.indexOf("?(") === 0) {
266
+ if (this.currPreventEval) {
267
+ throw new Error("Eval [?(expr)] prevented in JSONPath expression.");
268
+ }
269
+ this._walk(loc, x, val, path, parent, parentPropName, callback, function(m, l, x2, v, p, par, pr, cb) {
270
+ if (that._eval(l.replace(/^\?\((.*?)\)$/, "$1"), v[m], m, p, par, pr)) {
271
+ addRet(that._trace(unshift(m, x2), v, p, par, pr, cb));
272
+ }
273
+ });
274
+ } else if (loc[0] === "(") {
275
+ if (this.currPreventEval) {
276
+ throw new Error("Eval [(expr)] prevented in JSONPath expression.");
277
+ }
278
+ addRet(this._trace(unshift(
279
+ this._eval(loc, val, path[path.length - 1], path.slice(0, -1), parent, parentPropName),
280
+ x
281
+ ), val, path, parent, parentPropName, callback));
282
+ } else if (loc[0] === "@") {
283
+ let addType = false;
284
+ const valueType = loc.slice(1, -2);
285
+ switch (valueType) {
286
+ default:
287
+ throw new TypeError("Unknown value type " + valueType);
288
+ case "scalar":
289
+ if (!val || ["object", "function"].indexOf(typeof val) < 0) {
290
+ addType = true;
291
+ }
292
+ break;
293
+ case "boolean":
294
+ case "string":
295
+ case "undefined":
296
+ case "function":
297
+ if (typeof val === valueType) {
298
+ addType = true;
299
+ }
300
+ break;
301
+ case "number":
302
+ if (typeof val === valueType && isFinite(val)) {
303
+ addType = true;
304
+ }
305
+ break;
306
+ case "nonFinite":
307
+ if (typeof val === "number" && !isFinite(val)) {
308
+ addType = true;
309
+ }
310
+ break;
311
+ case "object":
312
+ if (val && typeof val === valueType) {
313
+ addType = true;
314
+ }
315
+ break;
316
+ case "array":
317
+ if (Array.isArray(val)) {
318
+ addType = true;
319
+ }
320
+ break;
321
+ case "other":
322
+ addType = this.currOtherTypeCallback(val, path, parent, parentPropName);
323
+ break;
324
+ case "integer":
325
+ if (val === Number(val) && isFinite(val) && !(val % 1)) {
326
+ addType = true;
327
+ }
328
+ break;
329
+ case "null":
330
+ if (val === null) {
331
+ addType = true;
332
+ }
333
+ break;
334
+ }
335
+ if (addType) {
336
+ retObj = { path, value: val, parent, parentProperty: parentPropName };
337
+ this._handleCallback(retObj, callback, "value");
338
+ return retObj;
339
+ }
340
+ } else if (loc[0] === "`" && val && hasOwnProp.call(val, loc.slice(1))) {
341
+ const locProp = loc.slice(1);
342
+ addRet(this._trace(x, val[locProp], push(path, locProp), val, locProp, callback, true));
343
+ } else if (loc.indexOf(",") > -1) {
344
+ const parts = loc.split(",");
345
+ parts.forEach(function(part) {
346
+ addRet(this._trace(unshift(part, x), val, path, parent, parentPropName, callback));
347
+ }.bind(this));
348
+ } else if (!literalPriority && val && hasOwnProp.call(val, loc)) {
349
+ addRet(this._trace(x, val[loc], push(path, loc), val, loc, callback, true));
350
+ }
351
+ if (this._hasParentSelector) {
352
+ for (let t = 0; t < ret.length; t++) {
353
+ const rett = ret[t];
354
+ if (rett.isParentSelector) {
355
+ const tmp = that._trace(
356
+ rett.expr,
357
+ val,
358
+ rett.path,
359
+ parent,
360
+ parentPropName,
361
+ callback
362
+ );
363
+ if (Array.isArray(tmp)) {
364
+ ret[t] = tmp[0];
365
+ const tl = tmp.length;
366
+ for (let tt = 1; tt < tl; tt++) {
367
+ t++;
368
+ ret.splice(t, 0, tmp[tt]);
369
+ }
370
+ } else {
371
+ ret[t] = tmp;
372
+ }
373
+ }
374
+ }
375
+ }
376
+ return ret;
377
+ };
378
+ JSONPath.prototype._walk = function(loc, expr, val, path, parent, parentPropName, callback, f) {
379
+ if (Array.isArray(val)) {
380
+ const n = val.length;
381
+ for (let i = 0; i < n; i++) {
382
+ f(i, loc, expr, val, path, parent, parentPropName, callback);
383
+ }
384
+ } else if (typeof val === "object") {
385
+ for (var m in val) {
386
+ if (hasOwnProp.call(val, m)) {
387
+ f(m, loc, expr, val, path, parent, parentPropName, callback);
388
+ }
389
+ }
390
+ }
391
+ };
392
+ JSONPath.prototype._slice = function(loc, expr, val, path, parent, parentPropName, callback) {
393
+ if (!Array.isArray(val)) {
394
+ return void 0;
395
+ }
396
+ const len = val.length, parts = loc.split(":"), step = parts[2] && parseInt(parts[2]) || 1;
397
+ let start = parts[0] && parseInt(parts[0]) || 0, end = parts[1] && parseInt(parts[1]) || len;
398
+ start = start < 0 ? Math.max(0, start + len) : Math.min(len, start);
399
+ end = end < 0 ? Math.max(0, end + len) : Math.min(len, end);
400
+ const ret = [];
401
+ for (let i = start; i < end; i += step) {
402
+ let tmp = this._trace(unshift(i, expr), val, path, parent, parentPropName, callback);
403
+ if (Array.isArray(tmp)) {
404
+ tmp.forEach((t) => {
405
+ ret.push(t);
406
+ });
407
+ } else {
408
+ ret.push(tmp);
409
+ }
410
+ }
411
+ return ret;
412
+ };
413
+ JSONPath.prototype._eval = function(code, _v, _vname, path, parent, parentPropName) {
414
+ if (!this._obj || !_v) {
415
+ return false;
416
+ }
417
+ if (code.indexOf("@parentProperty") > -1) {
418
+ this.currSandbox._$_parentProperty = parentPropName;
419
+ code = code.replace(/@parentProperty/g, "_$_parentProperty");
420
+ }
421
+ if (code.indexOf("@parent") > -1) {
422
+ this.currSandbox._$_parent = parent;
423
+ code = code.replace(/@parent/g, "_$_parent");
424
+ }
425
+ if (code.indexOf("@property") > -1) {
426
+ this.currSandbox._$_property = _vname;
427
+ code = code.replace(/@property/g, "_$_property");
428
+ }
429
+ if (code.indexOf("@path") > -1) {
430
+ this.currSandbox._$_path = JSONPath.toPathString(path.concat([_vname]));
431
+ code = code.replace(/@path/g, "_$_path");
432
+ }
433
+ if (code.match(/@([.\s)[])/)) {
434
+ this.currSandbox._$_v = _v;
435
+ code = code.replace(/@([.\s)[])/g, "_$_v$1");
436
+ }
437
+ try {
438
+ return vm.runInNewContext(code, this.currSandbox);
439
+ } catch (e) {
440
+ console.log(e);
441
+ throw new Error("jsonPath: " + e.message + ": " + code);
442
+ }
443
+ };
444
+ JSONPath.cache = {};
445
+ JSONPath.toPathString = function(pathArr) {
446
+ const x = pathArr, n = x.length;
447
+ let p = "$";
448
+ for (let i = 1; i < n; i++) {
449
+ if (!/^(~|\^|@.*?\(\))$/.test(x[i])) {
450
+ p += /^[0-9*]+$/.test(x[i]) ? "[" + x[i] + "]" : "['" + x[i] + "']";
451
+ }
452
+ }
453
+ return p;
454
+ };
455
+ JSONPath.toPointer = function(pointer) {
456
+ const x = pointer, n = x.length;
457
+ let p = "";
458
+ for (let i = 1; i < n; i++) {
459
+ if (!/^(~|\^|@.*?\(\))$/.test(x[i])) {
460
+ p += "/" + x[i].toString().replace(/~/g, "~0").replace(/\//g, "~1");
461
+ }
462
+ }
463
+ return p;
464
+ };
465
+ JSONPath.toPathArray = function(expr) {
466
+ const { cache } = JSONPath;
467
+ if (cache[expr]) {
468
+ return cache[expr].concat();
469
+ }
470
+ const subx = [];
471
+ const normalized = expr.replace(
472
+ /@(?:null|boolean|number|string|integer|undefined|nonFinite|scalar|array|object|function|other)\(\)/g,
473
+ ";$&;"
474
+ ).replace(/[['](\??\(.*?\))[\]']/g, function($0, $1) {
475
+ return "[#" + (subx.push($1) - 1) + "]";
476
+ }).replace(/\['([^'\]]*)'\]/g, function($0, prop) {
477
+ return "['" + prop.replace(/\./g, "%@%").replace(/~/g, "%%@@%%") + "']";
478
+ }).replace(/~/g, ";~;").replace(/'?\.'?(?![^[]*\])|\['?/g, ";").replace(/%@%/g, ".").replace(/%%@@%%/g, "~").replace(/(?:;)?(\^+)(?:;)?/g, function($0, ups) {
479
+ return ";" + ups.split("").join(";") + ";";
480
+ }).replace(/;;;|;;/g, ";..;").replace(/;$|'?\]|'$/g, "");
481
+ const exprList = normalized.split(";").map(function(exp) {
482
+ const match = exp.match(/#(\d+)/);
483
+ return !match || !match[1] ? exp : subx[match[1]];
484
+ });
485
+ cache[expr] = exprList;
486
+ return cache[expr];
487
+ };
488
+ var jsonpath_default = JSONPath;
489
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWxzL2pzb25wYXRoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxuKiBGb3JrZWQgZnJvbSBzb3VyY2UgcHVibGlzaGVkIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9zM3Ugd2l0aCBNSVRcbiogbGljZW5zZSBhcyBvZiA1LzMwLzIwMTkgYW5kIGFkYXB0ZWQgZm9yIERpcmlnaWJsZVxuKiBDb250cmlidXRvcnM6XG4qICAgczN1IChodHRwczovL2dpdGh1Yi5jb20vczN1KSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuKiAgIFNBUCAtIGFkYXB0ZWQgZm9yIERpcmlnaWJsZVxuKi9cbmNvbnN0IGdsb2JhbEV2YWwgPSBldmFsO1xuY29uc3QgYWxsb3dlZFJlc3VsdFR5cGVzID0gWyd2YWx1ZScsICdwYXRoJywgJ3BvaW50ZXInLCAncGFyZW50JywgJ3BhcmVudFByb3BlcnR5JywgJ2FsbCddO1xuY29uc3Qge2hhc093blByb3BlcnR5OiBoYXNPd25Qcm9wfSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ29weSBpdGVtcyBvdXQgb2Ygb25lIGFycmF5IGludG8gYW5vdGhlci5cbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBBcnJheSB3aXRoIGl0ZW1zIHRvIGNvcHlcbiAqIEBwYXJhbSB7QXJyYXl9IHRhcmdldCBBcnJheSB0byB3aGljaCB0byBjb3B5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25kaXRpb25DYiBDYWxsYmFjayBwYXNzZWQgdGhlIGN1cnJlbnQgaXRlbTsgd2lsbCBtb3ZlXG4gKiBpdGVtIGlmIGV2YWx1YXRlcyB0byBgdHJ1ZWBcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmNvbnN0IG1vdmVUb0Fub3RoZXJBcnJheSA9IGZ1bmN0aW9uIChzb3VyY2UsIHRhcmdldCwgY29uZGl0aW9uQ2IpIHtcbiAgICBjb25zdCBpbCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzb3VyY2VbaV07XG4gICAgICAgIGlmIChjb25kaXRpb25DYihpdGVtKSkge1xuICAgICAgICAgICAgdGFyZ2V0LnB1c2goc291cmNlLnNwbGljZShpLS0sIDEpWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IHZtID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgRXhwcmVzc2lvbiB0byBldmFsdWF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCBPYmplY3Qgd2hvc2UgaXRlbXMgd2lsbCBiZSBhZGRlZCB0byBldmFsdWF0aW9uXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXN1bHQgb2YgZXZhbHVhdGVkIGNvZGVcbiAgICAgICAgICovXG4gICAgICAgIHJ1bkluTmV3Q29udGV4dCAoZXhwciwgY29udGV4dCkge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc3QgZnVuY3MgPSBbXTtcbiAgICAgICAgICAgIG1vdmVUb0Fub3RoZXJBcnJheShrZXlzLCBmdW5jcywgKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgY29udGV4dFtrZXldID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gZnVuY3MucmVkdWNlKChzLCBmdW5jKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZTdHJpbmcgPSBjb250ZXh0W2Z1bmNdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaWYgKCEoL2Z1bmN0aW9uLykuZXhlYyhmU3RyaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICBmU3RyaW5nID0gJ2Z1bmN0aW9uICcgKyBmU3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhciAnICsgZnVuYyArICc9JyArIGZTdHJpbmcgKyAnOycgKyBzO1xuICAgICAgICAgICAgfSwgJycpICsga2V5cy5yZWR1Y2UoKHMsIHZyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd2YXIgJyArIHZyICsgJz0nICsgSlNPTi5zdHJpbmdpZnkoY29udGV4dFt2cl0pLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudGhlc3Bhbm5lci5jby51ay8yMDExLzA3LzI1L3RoZS1qc29uLXNwZWNpZmljYXRpb24taXMtbm93LXdyb25nL1xuICAgICAgICAgICAgICAgICAgICAvXFx1MjAyOHxcXHUyMDI5L2csIChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcXFx1MjAyJyArIChtID09PSAnXFx1MjAyOCcgPyAnOCcgOiAnOScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSArICc7JyArIHM7XG4gICAgICAgICAgICB9LCBleHByKTtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxFdmFsKGNvZGUpO1xuICAgICAgICB9XG4gICAgfTtcblxuLyoqXG4gKiBDb3BpZXMgYXJyYXkgYW5kIHRoZW4gcHVzaGVzIGl0ZW0gaW50byBpdC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyciBBcnJheSB0byBjb3B5IGFuZCBpbnRvIHdoaWNoIHRvIHB1c2hcbiAqIEBwYXJhbSB7Kn0gaXRlbSBBcnJheSBpdGVtIHRvIGFkZCAodG8gZW5kKVxuICogQHJldHVybnMge0FycmF5fSBDb3B5IG9mIHRoZSBvcmlnaW5hbCBhcnJheVxuICovXG5mdW5jdGlvbiBwdXNoIChhcnIsIGl0ZW0pIHtcbiAgICBhcnIgPSBhcnIuc2xpY2UoKTtcbiAgICBhcnIucHVzaChpdGVtKTtcbiAgICByZXR1cm4gYXJyO1xufVxuLyoqXG4gKiBDb3BpZXMgYXJyYXkgYW5kIHRoZW4gdW5zaGlmdHMgaXRlbSBpbnRvIGl0LlxuICogQHBhcmFtIHsqfSBpdGVtIEFycmF5IGl0ZW0gdG8gYWRkICh0byBiZWdpbm5pbmcpXG4gKiBAcGFyYW0ge0FycmF5fSBhcnIgQXJyYXkgdG8gY29weSBhbmQgaW50byB3aGljaCB0byB1bnNoaWZ0XG4gKiBAcmV0dXJucyB7QXJyYXl9IENvcHkgb2YgdGhlIG9yaWdpbmFsIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHVuc2hpZnQgKGl0ZW0sIGFycikge1xuICAgIGFyciA9IGFyci5zbGljZSgpO1xuICAgIGFyci51bnNoaWZ0KGl0ZW0pO1xuICAgIHJldHVybiBhcnI7XG59XG5cbi8qKlxuICogQ2F1Z2h0IHdoZW4gSlNPTlBhdGggaXMgdXNlZCB3aXRob3V0IGBuZXdgIGJ1dCByZXRocm93biBpZiB3aXRoIGBuZXdgXG4gKiBAZXh0ZW5kcyBFcnJvclxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgZXZhbHVhdGVkIHNjYWxhciB2YWx1ZVxuICovXG52YXIgTmV3RXJyb3IgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBjb25zdCBlcnJvciA9IEVycm9yLmNhbGwodGhpcywgJ0pTT05QYXRoIHNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggXCJuZXdcIiAoaXQgcHJldmVudHMgcmV0dXJuIG9mICh1bndyYXBwZWQpIHNjYWxhciB2YWx1ZXMpJyk7XG4gICAgdGhpcy5tZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gICAgdGhpcy5hdm9pZE5ldyA9IHRydWU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMubmFtZSA9ICdOZXdFcnJvcic7XG59XG5OZXdFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5OZXdFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOZXdFcnJvcjtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIElmIHByZXNlbnQsIG11c3QgYmUgYW4gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwciBKU09OIHBhdGggdG8gZXZhbHVhdGVcbiAqIEBwYXJhbSB7SlNPTn0gb2JqIEpTT04gb2JqZWN0IHRvIGV2YWx1YXRlIGFnYWluc3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFBhc3NlZCAzIGFyZ3VtZW50czogMSkgZGVzaXJlZCBwYXlsb2FkIHBlciBgcmVzdWx0VHlwZWAsXG4gKiAgICAgMikgYFwidmFsdWVcInxcInByb3BlcnR5XCJgLCAzKSBGdWxsIHJldHVybmVkIG9iamVjdCB3aXRoIGFsbCBwYXlsb2Fkc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gb3RoZXJUeXBlQ2FsbGJhY2sgSWYgYEBvdGhlcigpYCBpcyBhdCB0aGUgZW5kIG9mIG9uZSdzIHF1ZXJ5LCB0aGlzXG4gKiAgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBpdGVtLCBpdHMgcGF0aCwgaXRzIHBhcmVudCwgYW5kIGl0cyBwYXJlbnQnc1xuICogIHByb3BlcnR5IG5hbWUsIGFuZCBpdCBzaG91bGQgcmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN1cHBsaWVkIHZhbHVlXG4gKiAgYmVsb25ncyB0byB0aGUgXCJvdGhlclwiIHR5cGUgb3Igbm90IChvciBpdCBtYXkgaGFuZGxlIHRyYW5zZm9ybWF0aW9ucyBhbmQgcmV0dXJuIGBmYWxzZWApLlxuICogQHJldHVybnMge0pTT05QYXRofVxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBKU09OUGF0aCAob3B0cywgZXhwciwgb2JqLCBjYWxsYmFjaywgb3RoZXJUeXBlQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSlNPTlBhdGgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEpTT05QYXRoKG9wdHMsIGV4cHIsIG9iaiwgY2FsbGJhY2ssIG90aGVyVHlwZUNhbGxiYWNrKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKCFlLmF2b2lkTmV3KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgICAgICBvdGhlclR5cGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBjYWxsYmFjayA9IG9iajtcbiAgICAgICAgb2JqID0gZXhwcjtcbiAgICAgICAgZXhwciA9IG9wdHM7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICB9XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgY29uc3Qgb2JqQXJncyA9IGhhc093blByb3AuY2FsbChvcHRzLCAnanNvbicpICYmIGhhc093blByb3AuY2FsbChvcHRzLCAncGF0aCcpO1xuICAgIHRoaXMuanNvbiA9IG9wdHMuanNvbiB8fCBvYmo7XG4gICAgdGhpcy5wYXRoID0gb3B0cy5wYXRoIHx8IGV4cHI7XG4gICAgdGhpcy5yZXN1bHRUeXBlID0gKG9wdHMucmVzdWx0VHlwZSAmJiBvcHRzLnJlc3VsdFR5cGUudG9Mb3dlckNhc2UoKSkgfHwgJ3ZhbHVlJztcbiAgICB0aGlzLmZsYXR0ZW4gPSBvcHRzLmZsYXR0ZW4gfHwgZmFsc2U7XG4gICAgdGhpcy53cmFwID0gaGFzT3duUHJvcC5jYWxsKG9wdHMsICd3cmFwJykgPyBvcHRzLndyYXAgOiB0cnVlO1xuICAgIHRoaXMuc2FuZGJveCA9IG9wdHMuc2FuZGJveCB8fCB7fTtcbiAgICB0aGlzLnByZXZlbnRFdmFsID0gb3B0cy5wcmV2ZW50RXZhbCB8fCBmYWxzZTtcbiAgICB0aGlzLnBhcmVudCA9IG9wdHMucGFyZW50IHx8IG51bGw7XG4gICAgdGhpcy5wYXJlbnRQcm9wZXJ0eSA9IG9wdHMucGFyZW50UHJvcGVydHkgfHwgbnVsbDtcbiAgICB0aGlzLmNhbGxiYWNrID0gb3B0cy5jYWxsYmFjayB8fCBjYWxsYmFjayB8fCBudWxsO1xuICAgIHRoaXMub3RoZXJUeXBlQ2FsbGJhY2sgPSBvcHRzLm90aGVyVHlwZUNhbGxiYWNrIHx8IG90aGVyVHlwZUNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzdXBwbHkgYW4gb3RoZXJUeXBlQ2FsbGJhY2sgY2FsbGJhY2sgb3B0aW9uIHdpdGggdGhlIEBvdGhlcigpIG9wZXJhdG9yLicpO1xuICAgIH07XG5cbiAgICBpZiAob3B0cy5hdXRvc3RhcnQgIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMuZXZhbHVhdGUoe1xuICAgICAgICAgICAgcGF0aDogKG9iakFyZ3MgPyBvcHRzLnBhdGggOiBleHByKSxcbiAgICAgICAgICAgIGpzb246IChvYmpBcmdzID8gb3B0cy5qc29uIDogb2JqKVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXQgfHwgdHlwZW9mIHJldCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOZXdFcnJvcihyZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxufVxuSlNPTlBhdGgucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlKTtcbkpTT05QYXRoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEpTT05QYXRoO1xuXG4vLyBQVUJMSUMgTUVUSE9EU1xuSlNPTlBhdGgucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gKGV4cHIsIGpzb24sIGNhbGxiYWNrLCBvdGhlclR5cGVDYWxsYmFjaykge1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIGxldCBjdXJyUGFyZW50ID0gdGhpcy5wYXJlbnQsXG4gICAgICAgIGN1cnJQYXJlbnRQcm9wZXJ0eSA9IHRoaXMucGFyZW50UHJvcGVydHk7XG4gICAgbGV0IHtmbGF0dGVuLCB3cmFwfSA9IHRoaXM7XG5cbiAgICB0aGlzLmN1cnJSZXN1bHRUeXBlID0gdGhpcy5yZXN1bHRUeXBlO1xuICAgIHRoaXMuY3VyclByZXZlbnRFdmFsID0gdGhpcy5wcmV2ZW50RXZhbDtcbiAgICB0aGlzLmN1cnJTYW5kYm94ID0gdGhpcy5zYW5kYm94O1xuICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgdGhpcy5jYWxsYmFjaztcbiAgICB0aGlzLmN1cnJPdGhlclR5cGVDYWxsYmFjayA9IG90aGVyVHlwZUNhbGxiYWNrIHx8IHRoaXMub3RoZXJUeXBlQ2FsbGJhY2s7XG5cbiAgICBqc29uID0ganNvbiB8fCB0aGlzLmpzb247XG4gICAgZXhwciA9IGV4cHIgfHwgdGhpcy5wYXRoO1xuICAgIGlmIChleHByICYmIHR5cGVvZiBleHByID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoIWV4cHIucGF0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzdXBwbHkgYSBcInBhdGhcIiBwcm9wZXJ0eSB3aGVuIHByb3ZpZGluZyBhbiBvYmplY3QgYXJndW1lbnQgdG8gSlNPTlBhdGguZXZhbHVhdGUoKS4nKTtcbiAgICAgICAgfVxuICAgICAgICBqc29uID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdqc29uJykgPyBleHByLmpzb24gOiBqc29uO1xuICAgICAgICBmbGF0dGVuID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdmbGF0dGVuJykgPyBleHByLmZsYXR0ZW4gOiBmbGF0dGVuO1xuICAgICAgICB0aGlzLmN1cnJSZXN1bHRUeXBlID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdyZXN1bHRUeXBlJykgPyBleHByLnJlc3VsdFR5cGUgOiB0aGlzLmN1cnJSZXN1bHRUeXBlO1xuICAgICAgICB0aGlzLmN1cnJTYW5kYm94ID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdzYW5kYm94JykgPyBleHByLnNhbmRib3ggOiB0aGlzLmN1cnJTYW5kYm94O1xuICAgICAgICB3cmFwID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICd3cmFwJykgPyBleHByLndyYXAgOiB3cmFwO1xuICAgICAgICB0aGlzLmN1cnJQcmV2ZW50RXZhbCA9IGhhc093blByb3AuY2FsbChleHByLCAncHJldmVudEV2YWwnKSA/IGV4cHIucHJldmVudEV2YWwgOiB0aGlzLmN1cnJQcmV2ZW50RXZhbDtcbiAgICAgICAgY2FsbGJhY2sgPSBoYXNPd25Qcm9wLmNhbGwoZXhwciwgJ2NhbGxiYWNrJykgPyBleHByLmNhbGxiYWNrIDogY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuY3Vyck90aGVyVHlwZUNhbGxiYWNrID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdvdGhlclR5cGVDYWxsYmFjaycpID8gZXhwci5vdGhlclR5cGVDYWxsYmFjayA6IHRoaXMuY3Vyck90aGVyVHlwZUNhbGxiYWNrO1xuICAgICAgICBjdXJyUGFyZW50ID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdwYXJlbnQnKSA/IGV4cHIucGFyZW50IDogY3VyclBhcmVudDtcbiAgICAgICAgY3VyclBhcmVudFByb3BlcnR5ID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdwYXJlbnRQcm9wZXJ0eScpID8gZXhwci5wYXJlbnRQcm9wZXJ0eSA6IGN1cnJQYXJlbnRQcm9wZXJ0eTtcbiAgICAgICAgZXhwciA9IGV4cHIucGF0aDtcbiAgICB9XG4gICAgY3VyclBhcmVudCA9IGN1cnJQYXJlbnQgfHwgbnVsbDtcbiAgICBjdXJyUGFyZW50UHJvcGVydHkgPSBjdXJyUGFyZW50UHJvcGVydHkgfHwgbnVsbDtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGV4cHIpKSB7XG4gICAgICAgIGV4cHIgPSBKU09OUGF0aC50b1BhdGhTdHJpbmcoZXhwcik7XG4gICAgfVxuICAgIGlmICghZXhwciB8fCAhanNvbiB8fCBhbGxvd2VkUmVzdWx0VHlwZXMuaW5kZXhPZih0aGlzLmN1cnJSZXN1bHRUeXBlKTwwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuX29iaiA9IGpzb247XG5cbiAgICBjb25zdCBleHByTGlzdCA9IEpTT05QYXRoLnRvUGF0aEFycmF5KGV4cHIpO1xuICAgIGlmIChleHByTGlzdFswXSA9PT0gJyQnICYmIGV4cHJMaXN0Lmxlbmd0aCA+IDEpIHsgZXhwckxpc3Quc2hpZnQoKTsgfVxuICAgIHRoaXMuX2hhc1BhcmVudFNlbGVjdG9yID0gbnVsbDtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzXG4gICAgICAgIC5fdHJhY2UoZXhwckxpc3QsIGpzb24sIFsnJCddLCBjdXJyUGFyZW50LCBjdXJyUGFyZW50UHJvcGVydHksIGNhbGxiYWNrKVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlYSkgeyByZXR1cm4gZWEgJiYgIWVhLmlzUGFyZW50U2VsZWN0b3I7IH0pO1xuXG4gICAgaWYgKCFyZXN1bHQubGVuZ3RoKSB7IHJldHVybiB3cmFwID8gW10gOiB1bmRlZmluZWQ7IH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMSAmJiAhd3JhcCAmJiAhQXJyYXkuaXNBcnJheShyZXN1bHRbMF0udmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRQcmVmZXJyZWRPdXRwdXQocmVzdWx0WzBdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5yZWR1Y2UoZnVuY3Rpb24gKHJzbHQsIGVhKSB7XG4gICAgICAgIGNvbnN0IHZhbE9yUGF0aCA9IHRoYXQuX2dldFByZWZlcnJlZE91dHB1dChlYSk7XG4gICAgICAgIGlmIChmbGF0dGVuICYmIEFycmF5LmlzQXJyYXkodmFsT3JQYXRoKSkge1xuICAgICAgICAgICAgcnNsdCA9IHJzbHQuY29uY2F0KHZhbE9yUGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByc2x0LnB1c2godmFsT3JQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnNsdDtcbiAgICB9LCBbXSk7XG59O1xuXG4vLyBQUklWQVRFIE1FVEhPRFNcblxuSlNPTlBhdGgucHJvdG90eXBlLl9nZXRQcmVmZXJyZWRPdXRwdXQgPSBmdW5jdGlvbiAoZWEpIHtcbiAgICBjb25zdCByZXN1bHRUeXBlID0gdGhpcy5jdXJyUmVzdWx0VHlwZTtcbiAgICBzd2l0Y2ggKHJlc3VsdFR5cGUpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIHJlc3VsdCB0eXBlJyk7XG4gICAgY2FzZSAnYWxsJzpcbiAgICAgICAgZWEucG9pbnRlciA9IEpTT05QYXRoLnRvUG9pbnRlcihlYS5wYXRoKTtcbiAgICAgICAgZWEucGF0aCA9IHR5cGVvZiBlYS5wYXRoID09PSAnc3RyaW5nJyA/IGVhLnBhdGggOiBKU09OUGF0aC50b1BhdGhTdHJpbmcoZWEucGF0aCk7XG4gICAgICAgIHJldHVybiBlYTtcbiAgICBjYXNlICd2YWx1ZSc6IGNhc2UgJ3BhcmVudCc6IGNhc2UgJ3BhcmVudFByb3BlcnR5JzpcbiAgICAgICAgcmV0dXJuIGVhW3Jlc3VsdFR5cGVdO1xuICAgIGNhc2UgJ3BhdGgnOlxuICAgICAgICByZXR1cm4gSlNPTlBhdGgudG9QYXRoU3RyaW5nKGVhW3Jlc3VsdFR5cGVdKTtcbiAgICBjYXNlICdwb2ludGVyJzpcbiAgICAgICAgcmV0dXJuIEpTT05QYXRoLnRvUG9pbnRlcihlYS5wYXRoKTtcbiAgICB9XG59O1xuXG5KU09OUGF0aC5wcm90b3R5cGUuX2hhbmRsZUNhbGxiYWNrID0gZnVuY3Rpb24gKGZ1bGxSZXRPYmosIGNhbGxiYWNrLCB0eXBlKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHByZWZlcnJlZE91dHB1dCA9IHRoaXMuX2dldFByZWZlcnJlZE91dHB1dChmdWxsUmV0T2JqKTtcbiAgICAgICAgZnVsbFJldE9iai5wYXRoID0gdHlwZW9mIGZ1bGxSZXRPYmoucGF0aCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gZnVsbFJldE9iai5wYXRoXG4gICAgICAgICAgICA6IEpTT05QYXRoLnRvUGF0aFN0cmluZyhmdWxsUmV0T2JqLnBhdGgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FsbGJhY2stcmV0dXJuXG4gICAgICAgIGNhbGxiYWNrKHByZWZlcnJlZE91dHB1dCwgdHlwZSwgZnVsbFJldE9iaik7XG4gICAgfVxufTtcblxuSlNPTlBhdGgucHJvdG90eXBlLl90cmFjZSA9IGZ1bmN0aW9uIChcbiAgICBleHByLCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrLCBsaXRlcmFsUHJpb3JpdHlcbikge1xuICAgIC8vIE5vIGV4cHIgdG8gZm9sbG93PyByZXR1cm4gcGF0aCBhbmQgdmFsdWUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIHRyYWNlIGJyYW5jaFxuICAgIGxldCByZXRPYmo7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgaWYgKCFleHByLmxlbmd0aCkge1xuICAgICAgICByZXRPYmogPSB7cGF0aDogcGF0aCwgdmFsdWU6IHZhbCwgcGFyZW50OiBwYXJlbnQsIHBhcmVudFByb3BlcnR5OiBwYXJlbnRQcm9wTmFtZX07XG4gICAgICAgIHRoaXMuX2hhbmRsZUNhbGxiYWNrKHJldE9iaiwgY2FsbGJhY2ssICd2YWx1ZScpO1xuICAgICAgICByZXR1cm4gcmV0T2JqO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYyA9IGV4cHJbMF0sIHggPSBleHByLnNsaWNlKDEpO1xuXG4gICAgLy8gV2UgbmVlZCB0byBnYXRoZXIgdGhlIHJldHVybiB2YWx1ZSBvZiByZWN1cnNpdmUgdHJhY2UgY2FsbHMgaW4gb3JkZXIgdG9cbiAgICAvLyBkbyB0aGUgcGFyZW50IHNlbCBjb21wdXRhdGlvbi5cbiAgICBjb25zdCByZXQgPSBbXTtcbiAgICBmdW5jdGlvbiBhZGRSZXQgKGVsZW1zKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1zKSkge1xuICAgICAgICAgICAgLy8gVGhpcyB3YXMgY2F1c2luZyBleGNlc3NpdmUgc3RhY2sgc2l6ZSBpbiBOb2RlICh3aXRoIG9yIHdpdGhvdXQgQmFiZWwpIGFnYWluc3Qgb3VyIHBlcmZvcm1hbmNlIHRlc3Q6IGByZXQucHVzaCguLi5lbGVtcyk7YFxuICAgICAgICAgICAgZWxlbXMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldC5wdXNoKHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXQucHVzaChlbGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKHR5cGVvZiBsb2MgIT09ICdzdHJpbmcnIHx8IGxpdGVyYWxQcmlvcml0eSkgJiYgdmFsICYmXG4gICAgICAgIGhhc093blByb3AuY2FsbCh2YWwsIGxvYylcbiAgICApIHsgLy8gc2ltcGxlIGNhc2UtLWRpcmVjdGx5IGZvbGxvdyBwcm9wZXJ0eVxuICAgICAgICBhZGRSZXQodGhpcy5fdHJhY2UoeCwgdmFsW2xvY10sIHB1c2gocGF0aCwgbG9jKSwgdmFsLCBsb2MsIGNhbGxiYWNrKSk7XG4gICAgfSBlbHNlIGlmIChsb2MgPT09ICcqJykgeyAvLyBhbGwgY2hpbGQgcHJvcGVydGllc1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gICAgICAgIHRoaXMuX3dhbGsobG9jLCB4LCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrLCBmdW5jdGlvbiAobSwgbCwgeCwgdiwgcCwgcGFyLCBwciwgY2IpIHtcbiAgICAgICAgICAgIGFkZFJldCh0aGF0Ll90cmFjZSh1bnNoaWZ0KG0sIHgpLCB2LCBwLCBwYXIsIHByLCBjYiwgdHJ1ZSkpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGxvYyA9PT0gJy4uJykgeyAvLyBhbGwgZGVzY2VuZGVudCBwYXJlbnQgcHJvcGVydGllc1xuICAgICAgICBhZGRSZXQodGhpcy5fdHJhY2UoeCwgdmFsLCBwYXRoLCBwYXJlbnQsIHBhcmVudFByb3BOYW1lLCBjYWxsYmFjaykpOyAvLyBDaGVjayByZW1haW5pbmcgZXhwcmVzc2lvbiB3aXRoIHZhbCdzIGltbWVkaWF0ZSBjaGlsZHJlblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gICAgICAgIHRoaXMuX3dhbGsobG9jLCB4LCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrLCBmdW5jdGlvbiAobSwgbCwgeCwgdiwgcCwgcGFyLCBwciwgY2IpIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IGpvaW4gbSBhbmQgeCBoZXJlIGJlY2F1c2Ugd2Ugb25seSB3YW50IHBhcmVudHMsIG5vdCBzY2FsYXIgdmFsdWVzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZbbV0gPT09ICdvYmplY3QnKSB7IC8vIEtlZXAgZ29pbmcgd2l0aCByZWN1cnNpdmUgZGVzY2VudCBvbiB2YWwncyBvYmplY3QgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBhZGRSZXQodGhhdC5fdHJhY2UodW5zaGlmdChsLCB4KSwgdlttXSwgcHVzaChwLCBtKSwgdiwgbSwgY2IpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgLy8gVGhlIHBhcmVudCBzZWwgY29tcHV0YXRpb24gaXMgaGFuZGxlZCBpbiB0aGUgZnJhbWUgYWJvdmUgdXNpbmcgdGhlXG4gICAgLy8gYW5jZXN0b3Igb2JqZWN0IG9mIHZhbFxuICAgIH0gZWxzZSBpZiAobG9jID09PSAnXicpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBub3QgYSBmaW5hbCBlbmRwb2ludCwgc28gd2UgZG8gbm90IGludm9rZSB0aGUgY2FsbGJhY2sgaGVyZVxuICAgICAgICB0aGlzLl9oYXNQYXJlbnRTZWxlY3RvciA9IHRydWU7XG4gICAgICAgIHJldHVybiBwYXRoLmxlbmd0aFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aC5zbGljZSgwLCAtMSksXG4gICAgICAgICAgICAgICAgZXhwcjogeCxcbiAgICAgICAgICAgICAgICBpc1BhcmVudFNlbGVjdG9yOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IFtdO1xuICAgIH0gZWxzZSBpZiAobG9jID09PSAnficpIHsgLy8gcHJvcGVydHkgbmFtZVxuICAgICAgICByZXRPYmogPSB7cGF0aDogcHVzaChwYXRoLCBsb2MpLCB2YWx1ZTogcGFyZW50UHJvcE5hbWUsIHBhcmVudDpwYXJlbnQsIHBhcmVudFByb3BlcnR5OiBudWxsfTtcbiAgICAgICAgdGhpcy5faGFuZGxlQ2FsbGJhY2socmV0T2JqLCBjYWxsYmFjaywgJ3Byb3BlcnR5Jyk7XG4gICAgICAgIHJldHVybiByZXRPYmo7XG4gICAgfSBlbHNlIGlmIChsb2MgPT09ICckJykgeyAvLyByb290IG9ubHlcbiAgICAgICAgYWRkUmV0KHRoaXMuX3RyYWNlKHgsIHZhbCwgcGF0aCwgbnVsbCwgbnVsbCwgY2FsbGJhY2spKTtcbiAgICB9IGVsc2UgaWYgKCgvXigtP1xcZCopOigtP1xcZCopOj8oXFxkKikkLykudGVzdChsb2MpKSB7IC8vIFtzdGFydDplbmQ6c3RlcF0gIFB5dGhvbiBzbGljZSBzeW50YXhcbiAgICAgICAgYWRkUmV0KHRoaXMuX3NsaWNlKGxvYywgeCwgdmFsLCBwYXRoLCBwYXJlbnQsIHBhcmVudFByb3BOYW1lLCBjYWxsYmFjaykpO1xuICAgIH0gZWxzZSBpZiAobG9jLmluZGV4T2YoJz8oJykgPT09IDApIHsgLy8gWz8oZXhwcildIChmaWx0ZXJpbmcpXG4gICAgICAgIGlmICh0aGlzLmN1cnJQcmV2ZW50RXZhbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdmFsIFs/KGV4cHIpXSBwcmV2ZW50ZWQgaW4gSlNPTlBhdGggZXhwcmVzc2lvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gICAgICAgIHRoaXMuX3dhbGsobG9jLCB4LCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrLCBmdW5jdGlvbiAobSwgbCwgeCwgdiwgcCwgcGFyLCBwciwgY2IpIHtcbiAgICAgICAgICAgIGlmICh0aGF0Ll9ldmFsKGwucmVwbGFjZSgvXlxcP1xcKCguKj8pXFwpJC8sICckMScpLCB2W21dLCBtLCBwLCBwYXIsIHByKSkge1xuICAgICAgICAgICAgICAgIGFkZFJldCh0aGF0Ll90cmFjZSh1bnNoaWZ0KG0sIHgpLCB2LCBwLCBwYXIsIHByLCBjYikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGxvY1swXSA9PT0gJygnKSB7IC8vIFsoZXhwcildIChkeW5hbWljIHByb3BlcnR5L2luZGV4KVxuICAgICAgICBpZiAodGhpcy5jdXJyUHJldmVudEV2YWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXZhbCBbKGV4cHIpXSBwcmV2ZW50ZWQgaW4gSlNPTlBhdGggZXhwcmVzc2lvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBcyB0aGlzIHdpbGwgcmVzb2x2ZSB0byBhIHByb3BlcnR5IG5hbWUgKGJ1dCB3ZSBkb24ndCBrbm93IGl0IHlldCksIHByb3BlcnR5IGFuZCBwYXJlbnQgaW5mb3JtYXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBvZiB0aGUgcHJvcGVydHkgdG8gd2hpY2ggdGhpcyBleHByZXNzaW9uIHdpbGwgcmVzb2x2ZVxuICAgICAgICBhZGRSZXQodGhpcy5fdHJhY2UodW5zaGlmdChcbiAgICAgICAgICAgIHRoaXMuX2V2YWwobG9jLCB2YWwsIHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aC5zbGljZSgwLCAtMSksIHBhcmVudCwgcGFyZW50UHJvcE5hbWUpLFxuICAgICAgICAgICAgeFxuICAgICAgICApLCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrKSk7XG4gICAgfSBlbHNlIGlmIChsb2NbMF0gPT09ICdAJykgeyAvLyB2YWx1ZSB0eXBlOiBAYm9vbGVhbigpLCBldGMuXG4gICAgICAgIGxldCBhZGRUeXBlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IGxvYy5zbGljZSgxLCAtMik7XG4gICAgICAgIHN3aXRjaCAodmFsdWVUeXBlKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIHZhbHVlIHR5cGUgJyArIHZhbHVlVHlwZSk7XG4gICAgICAgIGNhc2UgJ3NjYWxhcic6XG4gICAgICAgICAgICBpZiAoIXZhbCB8fCAoWydvYmplY3QnLCAnZnVuY3Rpb24nXS5pbmRleE9mKHR5cGVvZiB2YWwpPDApKSB7XG4gICAgICAgICAgICAgICAgYWRkVHlwZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6IGNhc2UgJ3N0cmluZyc6IGNhc2UgJ3VuZGVmaW5lZCc6IGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSB2YWx1ZVR5cGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSB2YWxpZC10eXBlb2ZcbiAgICAgICAgICAgICAgICBhZGRUeXBlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IHZhbHVlVHlwZSAmJiBpc0Zpbml0ZSh2YWwpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgdmFsaWQtdHlwZW9mXG4gICAgICAgICAgICAgICAgYWRkVHlwZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbm9uRmluaXRlJzpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUodmFsKSkge1xuICAgICAgICAgICAgICAgIGFkZFR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09IHZhbHVlVHlwZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHZhbGlkLXR5cGVvZlxuICAgICAgICAgICAgICAgIGFkZFR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgICAgICBhZGRUeXBlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvdGhlcic6XG4gICAgICAgICAgICBhZGRUeXBlID0gdGhpcy5jdXJyT3RoZXJUeXBlQ2FsbGJhY2sodmFsLCBwYXRoLCBwYXJlbnQsIHBhcmVudFByb3BOYW1lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgICAgIGlmICh2YWwgPT09IE51bWJlcih2YWwpICYmIGlzRmluaXRlKHZhbCkgJiYgISh2YWwgJSAxKSkge1xuICAgICAgICAgICAgICAgIGFkZFR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFkZFR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFkZFR5cGUpIHtcbiAgICAgICAgICAgIHJldE9iaiA9IHtwYXRoOiBwYXRoLCB2YWx1ZTogdmFsLCBwYXJlbnQ6IHBhcmVudCwgcGFyZW50UHJvcGVydHk6IHBhcmVudFByb3BOYW1lfTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbGxiYWNrKHJldE9iaiwgY2FsbGJhY2ssICd2YWx1ZScpO1xuICAgICAgICAgICAgcmV0dXJuIHJldE9iajtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG9jWzBdID09PSAnYCcgJiYgdmFsICYmIGhhc093blByb3AuY2FsbCh2YWwsIGxvYy5zbGljZSgxKSkpIHsgLy8gYC1lc2NhcGVkIHByb3BlcnR5XG4gICAgICAgIGNvbnN0IGxvY1Byb3AgPSBsb2Muc2xpY2UoMSk7XG4gICAgICAgIGFkZFJldCh0aGlzLl90cmFjZSh4LCB2YWxbbG9jUHJvcF0sIHB1c2gocGF0aCwgbG9jUHJvcCksIHZhbCwgbG9jUHJvcCwgY2FsbGJhY2ssIHRydWUpKTtcbiAgICB9IGVsc2UgaWYgKGxvYy5pbmRleE9mKCcsJyk+LTEpIHsgLy8gW25hbWUxLG5hbWUyLC4uLl1cbiAgICAgICAgY29uc3QgcGFydHMgPSBsb2Muc3BsaXQoJywnKTtcbiAgICAgICAgcGFydHMuZm9yRWFjaChmdW5jdGlvbihwYXJ0KXtcbiAgICAgICAgICAgIGFkZFJldCh0aGlzLl90cmFjZSh1bnNoaWZ0KHBhcnQsIHgpLCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrKSk7XG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICB9IGVsc2UgaWYgKCFsaXRlcmFsUHJpb3JpdHkgJiYgdmFsICYmIGhhc093blByb3AuY2FsbCh2YWwsIGxvYykpIHsgLy8gc2ltcGxlIGNhc2UtLWRpcmVjdGx5IGZvbGxvdyBwcm9wZXJ0eVxuICAgICAgICBhZGRSZXQodGhpcy5fdHJhY2UoeCwgdmFsW2xvY10sIHB1c2gocGF0aCwgbG9jKSwgdmFsLCBsb2MsIGNhbGxiYWNrLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gV2UgY2hlY2sgdGhlIHJlc3VsdGluZyB2YWx1ZXMgZm9yIHBhcmVudCBzZWxlY3Rpb25zLiBGb3IgcGFyZW50XG4gICAgLy8gc2VsZWN0aW9ucyB3ZSBkaXNjYXJkIHRoZSB2YWx1ZSBvYmplY3QgYW5kIGNvbnRpbnVlIHRoZSB0cmFjZSB3aXRoIHRoZVxuICAgIC8vIGN1cnJlbnQgdmFsIG9iamVjdFxuICAgIGlmICh0aGlzLl9oYXNQYXJlbnRTZWxlY3Rvcikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1mb3ItbG9vcFxuICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHJldC5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgY29uc3QgcmV0dCA9IHJldFt0XTtcbiAgICAgICAgICAgIGlmIChyZXR0LmlzUGFyZW50U2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGF0Ll90cmFjZShcbiAgICAgICAgICAgICAgICAgICAgcmV0dC5leHByLCB2YWwsIHJldHQucGF0aCwgcGFyZW50LCBwYXJlbnRQcm9wTmFtZSwgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRtcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W3RdID0gdG1wWzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0bCA9IHRtcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHR0ID0gMTsgdHQgPCB0bDsgdHQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNwbGljZSh0LCAwLCB0bXBbdHRdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldFt0XSA9IHRtcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufTtcblxuSlNPTlBhdGgucHJvdG90eXBlLl93YWxrID0gZnVuY3Rpb24gKGxvYywgZXhwciwgdmFsLCBwYXRoLCBwYXJlbnQsIHBhcmVudFByb3BOYW1lLCBjYWxsYmFjaywgZikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgY29uc3QgbiA9IHZhbC5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBmKGksIGxvYywgZXhwciwgdmFsLCBwYXRoLCBwYXJlbnQsIHBhcmVudFByb3BOYW1lLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIG0gaW4gdmFsKSB7IC8vIG9yaWdpbmFsbHkgbSBkZWNsYXJlZCBhcyBgY29uc3RgLCBidXQgdGhpcyBpcyBub3QgYWxsb3dlZCBpbiBSaGlub1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AuY2FsbCh2YWwsIG0pKSB7XG4gICAgICAgICAgICAgICAgZihtLCBsb2MsIGV4cHIsIHZhbCwgcGF0aCwgcGFyZW50LCBwYXJlbnRQcm9wTmFtZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuSlNPTlBhdGgucHJvdG90eXBlLl9zbGljZSA9IGZ1bmN0aW9uIChsb2MsIGV4cHIsIHZhbCwgcGF0aCwgcGFyZW50LCBwYXJlbnRQcm9wTmFtZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgY29uc3QgbGVuID0gdmFsLmxlbmd0aCwgcGFydHMgPSBsb2Muc3BsaXQoJzonKSxcbiAgICAgICAgc3RlcCA9IChwYXJ0c1syXSAmJiBwYXJzZUludChwYXJ0c1syXSkpIHx8IDE7XG4gICAgbGV0IHN0YXJ0ID0gKHBhcnRzWzBdICYmIHBhcnNlSW50KHBhcnRzWzBdKSkgfHwgMCxcbiAgICAgICAgZW5kID0gKHBhcnRzWzFdICYmIHBhcnNlSW50KHBhcnRzWzFdKSkgfHwgbGVuO1xuICAgIHN0YXJ0ID0gKHN0YXJ0IDwgMCkgPyBNYXRoLm1heCgwLCBzdGFydCArIGxlbikgOiBNYXRoLm1pbihsZW4sIHN0YXJ0KTtcbiAgICBlbmQgPSAoZW5kIDwgMCkgPyBNYXRoLm1heCgwLCBlbmQgKyBsZW4pIDogTWF0aC5taW4obGVuLCBlbmQpO1xuICAgIGNvbnN0IHJldCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBzdGVwKSB7XG4gICAgICAgIGxldCB0bXAgPSB0aGlzLl90cmFjZSh1bnNoaWZ0KGksIGV4cHIpLCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrKTsvLyBvcmlnaW5hbGx5IGRlY2xhcmVkIGFzIGBjb25zdGAsIHRoaXMgZG9lc24ndCB3b3JrIGluIFJoaW5vXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRtcCkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgd2FzIGNhdXNpbmcgZXhjZXNzaXZlIHN0YWNrIHNpemUgaW4gTm9kZSAod2l0aCBvciB3aXRob3V0IEJhYmVsKSBhZ2FpbnN0IG91ciBwZXJmb3JtYW5jZSB0ZXN0OiBgcmV0LnB1c2goLi4udG1wKTtgXG4gICAgICAgICAgICB0bXAuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldC5wdXNoKHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXQucHVzaCh0bXApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuXG5KU09OUGF0aC5wcm90b3R5cGUuX2V2YWwgPSBmdW5jdGlvbiAoY29kZSwgX3YsIF92bmFtZSwgcGF0aCwgcGFyZW50LCBwYXJlbnRQcm9wTmFtZSkge1xuICAgIGlmICghdGhpcy5fb2JqIHx8ICFfdikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAoY29kZS5pbmRleE9mKCdAcGFyZW50UHJvcGVydHknKT4tMSkge1xuICAgICAgICB0aGlzLmN1cnJTYW5kYm94Ll8kX3BhcmVudFByb3BlcnR5ID0gcGFyZW50UHJvcE5hbWU7XG4gICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL0BwYXJlbnRQcm9wZXJ0eS9nLCAnXyRfcGFyZW50UHJvcGVydHknKTtcbiAgICB9XG4gICAgaWYgKGNvZGUuaW5kZXhPZignQHBhcmVudCcpPi0xKSB7XG4gICAgICAgIHRoaXMuY3VyclNhbmRib3guXyRfcGFyZW50ID0gcGFyZW50O1xuICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC9AcGFyZW50L2csICdfJF9wYXJlbnQnKTtcbiAgICB9XG4gICAgaWYgKGNvZGUuaW5kZXhPZignQHByb3BlcnR5Jyk+LTEpIHtcbiAgICAgICAgdGhpcy5jdXJyU2FuZGJveC5fJF9wcm9wZXJ0eSA9IF92bmFtZTtcbiAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgvQHByb3BlcnR5L2csICdfJF9wcm9wZXJ0eScpO1xuICAgIH1cbiAgICBpZiAoY29kZS5pbmRleE9mKCdAcGF0aCcpPi0xKSB7XG4gICAgICAgIHRoaXMuY3VyclNhbmRib3guXyRfcGF0aCA9IEpTT05QYXRoLnRvUGF0aFN0cmluZyhwYXRoLmNvbmNhdChbX3ZuYW1lXSkpO1xuICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC9AcGF0aC9nLCAnXyRfcGF0aCcpO1xuICAgIH1cbiAgICBpZiAoY29kZS5tYXRjaCgvQChbLlxccylbXSkvKSkge1xuICAgICAgICB0aGlzLmN1cnJTYW5kYm94Ll8kX3YgPSBfdjtcbiAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgvQChbLlxccylbXSkvZywgJ18kX3YkMScpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gdm0ucnVuSW5OZXdDb250ZXh0KGNvZGUsIHRoaXMuY3VyclNhbmRib3gpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignanNvblBhdGg6ICcgKyBlLm1lc3NhZ2UgKyAnOiAnICsgY29kZSk7XG4gICAgfVxufTtcblxuLy8gUFVCTElDIENMQVNTIFBST1BFUlRJRVMgQU5EIE1FVEhPRFNcblxuLy8gQ291bGQgc3RvcmUgdGhlIGNhY2hlIG9iamVjdCBpdHNlbGZcbkpTT05QYXRoLmNhY2hlID0ge307XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aEFyciBBcnJheSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCBzdHJpbmdcbiAqL1xuSlNPTlBhdGgudG9QYXRoU3RyaW5nID0gZnVuY3Rpb24gKHBhdGhBcnIpIHtcbiAgICBjb25zdCB4ID0gcGF0aEFyciwgbiA9IHgubGVuZ3RoO1xuICAgIGxldCBwID0gJyQnO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGlmICghKC9eKH58XFxefEAuKj9cXChcXCkpJC8pLnRlc3QoeFtpXSkpIHtcbiAgICAgICAgICAgIHAgKz0gKC9eWzAtOSpdKyQvKS50ZXN0KHhbaV0pID8gKCdbJyArIHhbaV0gKyAnXScpIDogKFwiWydcIiArIHhbaV0gKyBcIiddXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcG9pbnRlciBKU09OIFBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEpTT04gUG9pbnRlclxuICovXG5KU09OUGF0aC50b1BvaW50ZXIgPSBmdW5jdGlvbiAocG9pbnRlcikge1xuICAgIGNvbnN0IHggPSBwb2ludGVyLCBuID0geC5sZW5ndGg7XG4gICAgbGV0IHAgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG47IGkrKykge1xuICAgICAgICBpZiAoISgvXih+fFxcXnxALio/XFwoXFwpKSQvKS50ZXN0KHhbaV0pKSB7XG4gICAgICAgICAgICBwICs9ICcvJyArIHhbaV0udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9+L2csICd+MCcpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnfjEnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcDtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgRXhwcmVzc2lvbiB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKi9cbkpTT05QYXRoLnRvUGF0aEFycmF5ID0gZnVuY3Rpb24gKGV4cHIpIHtcbiAgICBjb25zdCB7Y2FjaGV9ID0gSlNPTlBhdGg7XG4gICAgaWYgKGNhY2hlW2V4cHJdKSB7IHJldHVybiBjYWNoZVtleHByXS5jb25jYXQoKTsgfVxuICAgIGNvbnN0IHN1YnggPSBbXTtcbiAgICBjb25zdCBub3JtYWxpemVkID0gZXhwclxuICAgICAgICAvLyBQcm9wZXJ0aWVzXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgL0AoPzpudWxsfGJvb2xlYW58bnVtYmVyfHN0cmluZ3xpbnRlZ2VyfHVuZGVmaW5lZHxub25GaW5pdGV8c2NhbGFyfGFycmF5fG9iamVjdHxmdW5jdGlvbnxvdGhlcilcXChcXCkvZyxcbiAgICAgICAgICAgICc7JCY7J1xuICAgICAgICApXG4gICAgICAgIC8vIFBhcmVudGhldGljYWwgZXZhbHVhdGlvbnMgKGZpbHRlcmluZyBhbmQgb3RoZXJ3aXNlKSwgZGlyZWN0bHlcbiAgICAgICAgLy8gICB3aXRoaW4gYnJhY2tldHMgb3Igc2luZ2xlIHF1b3Rlc1xuICAgICAgICAucmVwbGFjZSgvW1snXShcXD8/XFwoLio/XFwpKVtcXF0nXS9nLCBmdW5jdGlvbiAoJDAsICQxKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1sjJyArIChzdWJ4LnB1c2goJDEpIC0gMSkgKyAnXSc7XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEVzY2FwZSBwZXJpb2RzIGFuZCB0aWxkZXMgd2l0aGluIHByb3BlcnRpZXNcbiAgICAgICAgLnJlcGxhY2UoL1xcWycoW14nXFxdXSopJ1xcXS9nLCBmdW5jdGlvbiAoJDAsIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBcIlsnXCIgKyBwcm9wXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLi9nLCAnJUAlJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvfi9nLCAnJSVAQCUlJykgK1xuICAgICAgICAgICAgICAgIFwiJ11cIjtcbiAgICAgICAgfSlcbiAgICAgICAgLy8gUHJvcGVydGllcyBvcGVyYXRvclxuICAgICAgICAucmVwbGFjZSgvfi9nLCAnO347JylcbiAgICAgICAgLy8gU3BsaXQgYnkgcHJvcGVydHkgYm91bmRhcmllc1xuICAgICAgICAucmVwbGFjZSgvJz9cXC4nPyg/IVteW10qXFxdKXxcXFsnPy9nLCAnOycpXG4gICAgICAgIC8vIFJlaW5zZXJ0IHBlcmlvZHMgd2l0aGluIHByb3BlcnRpZXNcbiAgICAgICAgLnJlcGxhY2UoLyVAJS9nLCAnLicpXG4gICAgICAgIC8vIFJlaW5zZXJ0IHRpbGRlcyB3aXRoaW4gcHJvcGVydGllc1xuICAgICAgICAucmVwbGFjZSgvJSVAQCUlL2csICd+JylcbiAgICAgICAgLy8gUGFyZW50XG4gICAgICAgIC5yZXBsYWNlKC8oPzo7KT8oXFxeKykoPzo7KT8vZywgZnVuY3Rpb24gKCQwLCB1cHMpIHtcbiAgICAgICAgICAgIHJldHVybiAnOycgKyB1cHMuc3BsaXQoJycpLmpvaW4oJzsnKSArICc7JztcbiAgICAgICAgfSlcbiAgICAgICAgLy8gRGVzY2VuZGVudHNcbiAgICAgICAgLnJlcGxhY2UoLzs7O3w7Oy9nLCAnOy4uOycpXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZ1xuICAgICAgICAucmVwbGFjZSgvOyR8Jz9cXF18JyQvZywgJycpO1xuXG4gICAgY29uc3QgZXhwckxpc3QgPSBub3JtYWxpemVkLnNwbGl0KCc7JykubWFwKGZ1bmN0aW9uIChleHApIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBleHAubWF0Y2goLyMoXFxkKykvKTtcbiAgICAgICAgcmV0dXJuICFtYXRjaCB8fCAhbWF0Y2hbMV0gPyBleHAgOiBzdWJ4W21hdGNoWzFdXTtcbiAgICB9KTtcbiAgICBjYWNoZVtleHByXSA9IGV4cHJMaXN0O1xuICAgIHJldHVybiBjYWNoZVtleHByXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEpTT05QYXRoO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQSxNQUFNLGFBQWE7QUFDbkIsTUFBTSxxQkFBcUIsQ0FBQyxTQUFTLFFBQVEsV0FBVyxVQUFVLGtCQUFrQixLQUFLO0FBQ3pGLE1BQU0sRUFBQyxnQkFBZ0IsV0FBVSxJQUFJLE9BQU87QUFVNUMsTUFBTSxxQkFBcUIsU0FBVSxRQUFRLFFBQVEsYUFBYTtBQUM5RCxRQUFNLEtBQUssT0FBTztBQUNsQixXQUFTLElBQUksR0FBRyxJQUFJLElBQUksS0FBSztBQUN6QixVQUFNLE9BQU8sT0FBTyxDQUFDO0FBQ3JCLFFBQUksWUFBWSxJQUFJLEdBQUc7QUFDbkIsYUFBTyxLQUFLLE9BQU8sT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBQSxJQUN4QztBQUFBLEVBQ0o7QUFDSjtBQUVBLE1BQU0sS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1ILGdCQUFpQixNQUFNLFNBQVM7QUFDNUIsVUFBTSxPQUFPLE9BQU8sS0FBSyxPQUFPO0FBQ2hDLFVBQU0sUUFBUSxDQUFDO0FBQ2YsdUJBQW1CLE1BQU0sT0FBTyxDQUFDLFFBQVE7QUFDckMsYUFBTyxPQUFPLFFBQVEsR0FBRyxNQUFNO0FBQUEsSUFDbkMsQ0FBQztBQUNELFVBQU0sT0FBTyxNQUFNLE9B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
@@ -0,0 +1,41 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var qrcode_exports = {};
19
+ __export(qrcode_exports, {
20
+ QRCode: () => QRCode
21
+ });
22
+ module.exports = __toCommonJS(qrcode_exports);
23
+ var import_bytes = require("@aerokit/sdk/io/bytes");
24
+ const QRCodeFacade = Java.type("org.eclipse.dirigible.components.api.utils.QRCodeFacade");
25
+ class QRCode {
26
+ /**
27
+ * Generates a QR code image byte array from the given text.
28
+ * The returned byte array represents the image data (e.g., PNG or JPEG format,
29
+ * depending on the native implementation's default output).
30
+ *
31
+ * @param text The string content to be encoded in the QR code.
32
+ * @returns A **JavaScript byte array (any[])** containing the raw QR code image data.
33
+ */
34
+ static generateQRCode(text) {
35
+ return import_bytes.Bytes.toJavaScriptBytes(QRCodeFacade.generateQRCode(text));
36
+ }
37
+ }
38
+ if (typeof module !== "undefined") {
39
+ module.exports = QRCode;
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWxzL3FyY29kZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQnl0ZXMgfSBmcm9tIFwiQGFlcm9raXQvc2RrL2lvL2J5dGVzXCI7XG5jb25zdCBRUkNvZGVGYWNhZGUgPSBKYXZhLnR5cGUoXCJvcmcuZWNsaXBzZS5kaXJpZ2libGUuY29tcG9uZW50cy5hcGkudXRpbHMuUVJDb2RlRmFjYWRlXCIpO1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIGdlbmVyYXRpbmcgUVIgY29kZXMuXG4gKiBJdCB1c2VzIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBKYXZhIFFSQ29kZUZhY2FkZSB0byBjb252ZXJ0IHRleHQgaW50b1xuICogYSBRUiBjb2RlIGltYWdlIHJlcHJlc2VudGVkIGFzIGEgcmF3IGJ5dGUgYXJyYXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBRUkNvZGUge1xuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgUVIgY29kZSBpbWFnZSBieXRlIGFycmF5IGZyb20gdGhlIGdpdmVuIHRleHQuXG4gICAgICogVGhlIHJldHVybmVkIGJ5dGUgYXJyYXkgcmVwcmVzZW50cyB0aGUgaW1hZ2UgZGF0YSAoZS5nLiwgUE5HIG9yIEpQRUcgZm9ybWF0LFxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uJ3MgZGVmYXVsdCBvdXRwdXQpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQgVGhlIHN0cmluZyBjb250ZW50IHRvIGJlIGVuY29kZWQgaW4gdGhlIFFSIGNvZGUuXG4gICAgICogQHJldHVybnMgQSAqKkphdmFTY3JpcHQgYnl0ZSBhcnJheSAoYW55W10pKiogY29udGFpbmluZyB0aGUgcmF3IFFSIGNvZGUgaW1hZ2UgZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlUVJDb2RlKHRleHQ6IHN0cmluZyk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIEJ5dGVzLnRvSmF2YVNjcmlwdEJ5dGVzKFFSQ29kZUZhY2FkZS5nZW5lcmF0ZVFSQ29kZSh0ZXh0KSk7XG4gICAgfVxufVxuXG4vLyBAdHMtaWdub3JlXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBRUkNvZGU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBc0I7QUFDdEIsTUFBTSxlQUFlLEtBQUssS0FBSyx5REFBeUQ7QUFPakYsTUFBTSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVWhCLE9BQWMsZUFBZSxNQUFxQjtBQUM5QyxXQUFPLG1CQUFNLGtCQUFrQixhQUFhLGVBQWUsSUFBSSxDQUFDO0FBQUEsRUFDcEU7QUFDSjtBQUdBLElBQUksT0FBTyxXQUFXLGFBQWE7QUFFL0IsU0FBTyxVQUFVO0FBQ3JCOyIsCiAgIm5hbWVzIjogW10KfQo=