@bitgo/abstract-utxo 10.17.0 → 10.18.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 (292) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +5 -6
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +24 -5
  4. package/dist/cjs/src/address/fixedScript.d.ts +1 -5
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +3 -5
  7. package/dist/cjs/src/descriptor/NamedDescriptor.d.ts +4 -5
  8. package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -1
  9. package/dist/cjs/src/descriptor/NamedDescriptor.js +4 -6
  10. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  11. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  12. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +3 -38
  13. package/dist/cjs/src/descriptor/builder/builder.d.ts +2 -3
  14. package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -1
  15. package/dist/cjs/src/descriptor/builder/builder.js +1 -1
  16. package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -1
  17. package/dist/cjs/src/descriptor/builder/parse.js +3 -3
  18. package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts +2 -2
  19. package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
  20. package/dist/cjs/src/descriptor/createWallet/createDescriptors.js +1 -1
  21. package/dist/cjs/src/descriptor/descriptorWallet.d.ts +1 -1
  22. package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -1
  23. package/dist/cjs/src/descriptor/descriptorWallet.js +1 -1
  24. package/dist/cjs/src/descriptor/index.d.ts +1 -1
  25. package/dist/cjs/src/descriptor/index.d.ts.map +1 -1
  26. package/dist/cjs/src/descriptor/index.js +1 -1
  27. package/dist/cjs/src/descriptor/validatePolicy.d.ts +3 -3
  28. package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -1
  29. package/dist/cjs/src/descriptor/validatePolicy.js +3 -3
  30. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
  31. package/dist/cjs/src/impl/bch/bch.js +6 -38
  32. package/dist/cjs/src/impl/doge/doge.d.ts +2 -1
  33. package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
  34. package/dist/cjs/src/impl/doge/doge.js +1 -1
  35. package/dist/cjs/src/impl/ltc/ltc.d.ts +0 -1
  36. package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -1
  37. package/dist/cjs/src/impl/ltc/ltc.js +3 -41
  38. package/dist/cjs/src/impl/ltc/tltc.d.ts +0 -1
  39. package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -1
  40. package/dist/cjs/src/impl/ltc/tltc.js +3 -40
  41. package/dist/cjs/src/index.d.ts +2 -0
  42. package/dist/cjs/src/index.d.ts.map +1 -1
  43. package/dist/cjs/src/index.js +3 -1
  44. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +2 -2
  45. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +3 -2
  46. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
  47. package/dist/cjs/src/offlineVault/descriptor/transaction.js +5 -8
  48. package/dist/cjs/src/recovery/RecoveryProvider.d.ts +1 -3
  49. package/dist/cjs/src/recovery/RecoveryProvider.d.ts.map +1 -1
  50. package/dist/cjs/src/recovery/RecoveryProvider.js +1 -1
  51. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +73 -4
  52. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  53. package/dist/cjs/src/recovery/backupKeyRecovery.js +163 -129
  54. package/dist/cjs/src/recovery/crossChainRecovery.d.ts +5 -5
  55. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  56. package/dist/cjs/src/recovery/crossChainRecovery.js +22 -121
  57. package/dist/cjs/src/recovery/psbt.d.ts +8 -31
  58. package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
  59. package/dist/cjs/src/recovery/psbt.js +14 -126
  60. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +3 -3
  61. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  62. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +17 -54
  63. package/dist/cjs/src/transaction/descriptor/index.d.ts +1 -1
  64. package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -1
  65. package/dist/cjs/src/transaction/descriptor/index.js +1 -1
  66. package/dist/cjs/src/transaction/descriptor/parse.d.ts +6 -4
  67. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  68. package/dist/cjs/src/transaction/descriptor/parse.js +24 -50
  69. package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts +6 -7
  70. package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -1
  71. package/dist/cjs/src/transaction/descriptor/signPsbt.js +19 -18
  72. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +4 -4
  73. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  74. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +10 -38
  75. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
  76. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  77. package/dist/cjs/src/transaction/explainTransaction.js +3 -2
  78. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +1 -3
  79. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -1
  80. package/dist/cjs/src/transaction/fixedScript/SigningError.js +1 -1
  81. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +2 -1
  82. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  83. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +1 -8
  84. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  85. package/dist/cjs/src/transaction/fixedScript/parseOutput.js +6 -11
  86. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
  87. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  88. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +4 -2
  89. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
  90. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
  91. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +1 -1
  92. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +2 -2
  93. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  94. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +4 -8
  95. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +6 -5
  96. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  97. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +42 -7
  98. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  99. package/dist/cjs/src/transaction/signTransaction.js +10 -10
  100. package/dist/cjs/src/unspent.d.ts +55 -0
  101. package/dist/cjs/src/unspent.d.ts.map +1 -0
  102. package/dist/cjs/src/unspent.js +12 -0
  103. package/dist/cjs/src/wasmUtil.d.ts +29 -0
  104. package/dist/cjs/src/wasmUtil.d.ts.map +1 -0
  105. package/dist/cjs/src/wasmUtil.js +87 -0
  106. package/dist/cjs/test/unit/address.d.ts +1 -1
  107. package/dist/cjs/test/unit/address.d.ts.map +1 -1
  108. package/dist/cjs/test/unit/address.js +107 -137
  109. package/dist/cjs/test/unit/bip322.js +50 -1
  110. package/dist/cjs/test/unit/customSigner.js +5 -4
  111. package/dist/cjs/test/unit/descriptor/NamedDescriptor.js +37 -4
  112. package/dist/cjs/test/unit/descriptor/builder.js +10 -4
  113. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.js +37 -4
  114. package/dist/cjs/test/unit/descriptor/descriptorWallet.js +40 -6
  115. package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -1
  116. package/dist/cjs/test/unit/descriptorAddress.js +3 -3
  117. package/dist/cjs/test/unit/explainTransaction.js +26 -3
  118. package/dist/cjs/test/unit/keychains.js +40 -1
  119. package/dist/cjs/test/unit/postProcessPrebuild.d.ts +2 -0
  120. package/dist/cjs/test/unit/postProcessPrebuild.d.ts.map +1 -0
  121. package/dist/cjs/test/unit/postProcessPrebuild.js +62 -0
  122. package/dist/cjs/test/unit/prebuildAndSign.d.ts +0 -4
  123. package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -1
  124. package/dist/cjs/test/unit/prebuildAndSign.js +12 -32
  125. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +82 -259
  126. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts +2 -0
  127. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts.map +1 -0
  128. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.js +144 -0
  129. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +38 -35
  130. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts +2 -0
  131. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts.map +1 -0
  132. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +186 -0
  133. package/dist/cjs/test/unit/recovery/mock.d.ts +15 -8
  134. package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -1
  135. package/dist/cjs/test/unit/recovery/mock.js +49 -77
  136. package/dist/cjs/test/unit/signTransaction.d.ts +2 -0
  137. package/dist/cjs/test/unit/signTransaction.d.ts.map +1 -0
  138. package/dist/cjs/test/unit/signTransaction.js +244 -0
  139. package/dist/cjs/test/unit/testSpoofTransaction.d.ts +2 -0
  140. package/dist/cjs/test/unit/testSpoofTransaction.d.ts.map +1 -0
  141. package/dist/cjs/test/unit/testSpoofTransaction.js +114 -0
  142. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.js +46 -12
  143. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts.map +1 -1
  144. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.js +38 -4
  145. package/dist/cjs/test/unit/transaction/descriptor/parse.js +22 -19
  146. package/dist/cjs/test/unit/transaction/descriptor/sign.js +60 -16
  147. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +43 -10
  148. package/dist/cjs/test/unit/transaction.js +6 -225
  149. package/dist/cjs/test/unit/util/address.d.ts +13 -0
  150. package/dist/cjs/test/unit/util/address.d.ts.map +1 -0
  151. package/dist/cjs/test/unit/util/address.js +15 -0
  152. package/dist/cjs/test/unit/util/index.d.ts +3 -0
  153. package/dist/cjs/test/unit/util/index.d.ts.map +1 -1
  154. package/dist/cjs/test/unit/util/index.js +4 -1
  155. package/dist/cjs/test/unit/util/keychains.d.ts +29 -0
  156. package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -1
  157. package/dist/cjs/test/unit/util/keychains.js +51 -1
  158. package/dist/cjs/test/unit/util/nockBitGo.d.ts +8 -1
  159. package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -1
  160. package/dist/cjs/test/unit/util/nockBitGo.js +17 -1
  161. package/dist/cjs/test/unit/util/psbt.d.ts +19 -0
  162. package/dist/cjs/test/unit/util/psbt.d.ts.map +1 -0
  163. package/dist/cjs/test/unit/util/psbt.js +21 -0
  164. package/dist/cjs/test/unit/util/transaction.d.ts +8 -4
  165. package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
  166. package/dist/cjs/test/unit/util/transaction.js +19 -1
  167. package/dist/cjs/test/unit/util/unspents.d.ts +66 -8
  168. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
  169. package/dist/cjs/test/unit/util/unspents.js +130 -15
  170. package/dist/cjs/test/unit/util/utxoCoins.d.ts +13 -0
  171. package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
  172. package/dist/cjs/test/unit/util/utxoCoins.js +33 -2
  173. package/dist/cjs/test/unit/wallet.js +4 -4
  174. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  175. package/dist/esm/abstractUtxoCoin.d.ts +5 -6
  176. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  177. package/dist/esm/abstractUtxoCoin.js +26 -7
  178. package/dist/esm/address/fixedScript.d.ts +1 -5
  179. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  180. package/dist/esm/address/fixedScript.js +3 -5
  181. package/dist/esm/descriptor/NamedDescriptor.d.ts +4 -5
  182. package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -1
  183. package/dist/esm/descriptor/NamedDescriptor.js +5 -7
  184. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  185. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  186. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +3 -5
  187. package/dist/esm/descriptor/builder/builder.d.ts +2 -3
  188. package/dist/esm/descriptor/builder/builder.d.ts.map +1 -1
  189. package/dist/esm/descriptor/builder/builder.js +1 -1
  190. package/dist/esm/descriptor/builder/parse.d.ts.map +1 -1
  191. package/dist/esm/descriptor/builder/parse.js +3 -3
  192. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +2 -2
  193. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
  194. package/dist/esm/descriptor/createWallet/createDescriptors.js +1 -1
  195. package/dist/esm/descriptor/descriptorWallet.d.ts +1 -1
  196. package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -1
  197. package/dist/esm/descriptor/descriptorWallet.js +1 -1
  198. package/dist/esm/descriptor/index.d.ts +1 -1
  199. package/dist/esm/descriptor/index.d.ts.map +1 -1
  200. package/dist/esm/descriptor/index.js +1 -1
  201. package/dist/esm/descriptor/validatePolicy.d.ts +3 -3
  202. package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -1
  203. package/dist/esm/descriptor/validatePolicy.js +3 -3
  204. package/dist/esm/impl/bch/bch.d.ts.map +1 -1
  205. package/dist/esm/impl/bch/bch.js +6 -5
  206. package/dist/esm/impl/doge/doge.d.ts +2 -1
  207. package/dist/esm/impl/doge/doge.d.ts.map +1 -1
  208. package/dist/esm/impl/doge/doge.js +1 -1
  209. package/dist/esm/impl/ltc/ltc.d.ts +0 -1
  210. package/dist/esm/impl/ltc/ltc.d.ts.map +1 -1
  211. package/dist/esm/impl/ltc/ltc.js +3 -8
  212. package/dist/esm/impl/ltc/tltc.d.ts +0 -1
  213. package/dist/esm/impl/ltc/tltc.d.ts.map +1 -1
  214. package/dist/esm/impl/ltc/tltc.js +3 -7
  215. package/dist/esm/index.d.ts +2 -0
  216. package/dist/esm/index.d.ts.map +1 -1
  217. package/dist/esm/index.js +3 -1
  218. package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +2 -2
  219. package/dist/esm/offlineVault/descriptor/transaction.d.ts +3 -2
  220. package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
  221. package/dist/esm/offlineVault/descriptor/transaction.js +5 -8
  222. package/dist/esm/recovery/RecoveryProvider.d.ts +1 -3
  223. package/dist/esm/recovery/RecoveryProvider.d.ts.map +1 -1
  224. package/dist/esm/recovery/RecoveryProvider.js +1 -1
  225. package/dist/esm/recovery/backupKeyRecovery.d.ts +73 -4
  226. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  227. package/dist/esm/recovery/backupKeyRecovery.js +165 -100
  228. package/dist/esm/recovery/crossChainRecovery.d.ts +5 -5
  229. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  230. package/dist/esm/recovery/crossChainRecovery.js +24 -90
  231. package/dist/esm/recovery/psbt.d.ts +8 -31
  232. package/dist/esm/recovery/psbt.d.ts.map +1 -1
  233. package/dist/esm/recovery/psbt.js +14 -91
  234. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +3 -3
  235. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  236. package/dist/esm/transaction/descriptor/explainPsbt.js +14 -18
  237. package/dist/esm/transaction/descriptor/index.d.ts +1 -1
  238. package/dist/esm/transaction/descriptor/index.d.ts.map +1 -1
  239. package/dist/esm/transaction/descriptor/index.js +1 -1
  240. package/dist/esm/transaction/descriptor/parse.d.ts +6 -4
  241. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  242. package/dist/esm/transaction/descriptor/parse.js +22 -15
  243. package/dist/esm/transaction/descriptor/signPsbt.d.ts +6 -7
  244. package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -1
  245. package/dist/esm/transaction/descriptor/signPsbt.js +19 -18
  246. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +4 -4
  247. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  248. package/dist/esm/transaction/descriptor/verifyTransaction.js +10 -5
  249. package/dist/esm/transaction/explainTransaction.d.ts +2 -1
  250. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  251. package/dist/esm/transaction/explainTransaction.js +3 -2
  252. package/dist/esm/transaction/fixedScript/SigningError.d.ts +1 -3
  253. package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -1
  254. package/dist/esm/transaction/fixedScript/SigningError.js +1 -1
  255. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +2 -1
  256. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  257. package/dist/esm/transaction/fixedScript/explainTransaction.js +1 -8
  258. package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  259. package/dist/esm/transaction/fixedScript/parseOutput.js +6 -11
  260. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
  261. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  262. package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +4 -2
  263. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
  264. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
  265. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +1 -1
  266. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +2 -2
  267. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  268. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +2 -6
  269. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +6 -5
  270. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  271. package/dist/esm/transaction/fixedScript/signTransaction.js +10 -8
  272. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  273. package/dist/esm/transaction/signTransaction.js +10 -10
  274. package/dist/esm/unspent.d.ts +55 -0
  275. package/dist/esm/unspent.d.ts.map +1 -0
  276. package/dist/esm/unspent.js +8 -0
  277. package/dist/esm/wasmUtil.d.ts +29 -0
  278. package/dist/esm/wasmUtil.d.ts.map +1 -0
  279. package/dist/esm/wasmUtil.js +47 -0
  280. package/package.json +11 -12
  281. package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts +0 -2
  282. package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts.map +0 -1
  283. package/dist/cjs/test/unit/impl/btc/unit/btc.js +0 -220
  284. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts +0 -4
  285. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts.map +0 -1
  286. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.js +0 -10
  287. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts +0 -2
  288. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts.map +0 -1
  289. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.js +0 -18
  290. package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts +0 -2
  291. package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts.map +0 -1
  292. package/dist/cjs/test/unit/impl/ltc/unit/index.js +0 -39
@@ -33,27 +33,30 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.getOutputScript = getOutputScript;
37
- exports.getWalletAddress = getWalletAddress;
38
36
  exports.mockWalletUnspent = mockWalletUnspent;
39
37
  exports.mockUnspentReplayProtection = mockUnspentReplayProtection;
40
38
  exports.mockUnspent = mockUnspent;
39
+ exports.toUnspent = toUnspent;
40
+ exports.createWasmWalletUnspent = createWasmWalletUnspent;
41
+ exports.createMockPrevTx = createMockPrevTx;
42
+ exports.toUnspentWithPrevTx = toUnspentWithPrevTx;
41
43
  const utxolib = __importStar(require("@bitgo/utxo-lib"));
42
44
  const sdk_test_1 = require("@bitgo/sdk-test");
43
45
  const wasmUtxo = __importStar(require("@bitgo/wasm-utxo"));
44
46
  const src_1 = require("../../../src");
45
47
  const names_1 = require("../../../src/names");
46
- const { scriptTypeForChain, chainCodesP2sh, getExternalChainCode, getInternalChainCode } = utxolib.bitgo;
47
- const defaultChain = getExternalChainCode(chainCodesP2sh);
48
- function getOutputScript(walletKeys, chain = defaultChain, index = 0) {
49
- return utxolib.bitgo.outputScripts.createOutputScript2of3(walletKeys.deriveForChainAndIndex(chain, index).publicKeys, scriptTypeForChain(chain));
50
- }
51
- function getWalletAddress(network, walletKeys, chain = defaultChain, index = 0) {
52
- if (utxolib.isTestnet(network)) {
53
- return wasmUtxo.fixedScriptWallet.address(walletKeys, chain, index, network);
48
+ const address_1 = require("./address");
49
+ const { chainCodesP2sh, getExternalChainCode, getInternalChainCode } = utxolib.bitgo;
50
+ function toCoinName(network) {
51
+ if (typeof network === 'string') {
52
+ if (!(0, names_1.isUtxoCoinName)(network)) {
53
+ throw new Error(`not a valid coin name: ${network}`);
54
+ }
55
+ return network;
54
56
  }
55
- return wasmUtxo.address.fromOutputScriptWithCoin(getOutputScript(walletKeys, chain, index).scriptPubKey, (0, names_1.getCoinName)(network));
57
+ return (0, names_1.getCoinName)(network);
56
58
  }
59
+ const defaultChain = getExternalChainCode(chainCodesP2sh);
57
60
  function mockOutputIdForAddress(address) {
58
61
  return (0, sdk_test_1.getSeed)(address).toString('hex') + ':1';
59
62
  }
@@ -64,7 +67,7 @@ function mockWalletUnspent(network, walletKeys, { id, chain = defaultChain, inde
64
67
  if (chain === undefined) {
65
68
  throw new Error(`unspent chain must be set`);
66
69
  }
67
- const deriveAddress = getWalletAddress(network, walletKeys, chain, index);
70
+ const deriveAddress = (0, address_1.getWalletAddress)(toCoinName(network), walletKeys, chain, index);
68
71
  if (address) {
69
72
  if (address !== deriveAddress) {
70
73
  throw new Error(`derivedAddress mismatch: ${address} derived=${deriveAddress}`);
@@ -85,7 +88,7 @@ function mockWalletUnspent(network, walletKeys, { id, chain = defaultChain, inde
85
88
  };
86
89
  }
87
90
  function mockUnspentReplayProtection(network, value) {
88
- const coinName = (0, names_1.getCoinName)(network);
91
+ const coinName = toCoinName(network);
89
92
  const addresses = (0, src_1.getReplayProtectionAddresses)(coinName);
90
93
  if (addresses.length) {
91
94
  const address = addresses[0];
@@ -95,7 +98,7 @@ function mockUnspentReplayProtection(network, value) {
95
98
  value,
96
99
  };
97
100
  }
98
- throw new Error(`${utxolib.getNetworkName(network)} has no replay protection unspetns`);
101
+ throw new Error(`${coinName} has no replay protection unspents`);
99
102
  }
100
103
  function mockUnspent(network, walletKeys, chain, index, value) {
101
104
  if (chain === 'replayProtection') {
@@ -105,4 +108,116 @@ function mockUnspent(network, walletKeys, chain, index, value) {
105
108
  return mockWalletUnspent(network, walletKeys, { chain: getInternalChainCode(chain), value, index });
106
109
  }
107
110
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zcGVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbC91bnNwZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSwwQ0FTQztBQUVELDRDQWFDO0FBTUQsOENBNkJDO0FBRUQsa0VBZUM7QUFFRCxrQ0FZQztBQTVHRCx5REFBMkM7QUFDM0MsOENBQTBDO0FBQzFDLDJEQUE2QztBQUU3QyxzQ0FBNEQ7QUFDNUQsOENBQWlEO0FBRWpELE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBU3pHLE1BQU0sWUFBWSxHQUFjLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRXJFLFNBQWdCLGVBQWUsQ0FDN0IsVUFBMEIsRUFDMUIsS0FBSyxHQUFHLFlBQVksRUFDcEIsS0FBSyxHQUFHLENBQUM7SUFFVCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUN2RCxVQUFVLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFDMUQsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQzFCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLE9BQXdCLEVBQ3hCLFVBQTBCLEVBQzFCLEtBQUssR0FBRyxZQUFZLEVBQ3BCLEtBQUssR0FBRyxDQUFDO0lBRVQsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0IsT0FBTyxRQUFRLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQyxP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IGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IGdldFNlZWQgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0ICogYXMgd2FzbVV0eG8gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgZ2V0Q29pbk5hbWUgfSBmcm9tICcuLi8uLi8uLi9zcmMvbmFtZXMnO1xuXG5jb25zdCB7IHNjcmlwdFR5cGVGb3JDaGFpbiwgY2hhaW5Db2Rlc1Ayc2gsIGdldEV4dGVybmFsQ2hhaW5Db2RlLCBnZXRJbnRlcm5hbENoYWluQ29kZSB9ID0gdXR4b2xpYi5iaXRnbztcblxudHlwZSBSb290V2FsbGV0S2V5cyA9IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXM7XG50eXBlIFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB1dHhvbGliLmJpdGdvLlVuc3BlbnQ8VE51bWJlcj47XG50eXBlIFdhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnQ8VE51bWJlcj47XG50eXBlIENoYWluQ29kZSA9IHV0eG9saWIuYml0Z28uQ2hhaW5Db2RlO1xuXG5leHBvcnQgdHlwZSBJbnB1dFNjcmlwdFR5cGUgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTJPZjMgfCAncmVwbGF5UHJvdGVjdGlvbic7XG5cbmNvbnN0IGRlZmF1bHRDaGFpbjogQ2hhaW5Db2RlID0gZ2V0RXh0ZXJuYWxDaGFpbkNvZGUoY2hhaW5Db2Rlc1Ayc2gpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0U2NyaXB0KFxuICB3YWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgY2hhaW4gPSBkZWZhdWx0Q2hhaW4sXG4gIGluZGV4ID0gMFxuKTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNwZW5kYWJsZVNjcmlwdCB7XG4gIHJldHVybiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhcbiAgICB3YWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgoY2hhaW4sIGluZGV4KS5wdWJsaWNLZXlzLFxuICAgIHNjcmlwdFR5cGVGb3JDaGFpbihjaGFpbilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdhbGxldEFkZHJlc3MoXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIGNoYWluID0gZGVmYXVsdENoYWluLFxuICBpbmRleCA9IDBcbik6IHN0cmluZyB7XG4gIGlmICh1dHhvbGliLmlzVGVzdG5ldChuZXR3b3JrKSkge1xuICAgIHJldHVybiB3YXNtVXR4by5maXhlZFNjcmlwdFdhbGxldC5hZGRyZXNzKHdhbGxldEtleXMsIGNoYWluLCBpbmRleCwgbmV0d29yayk7XG4gIH1cbiAgcmV0dXJuIHdhc21VdHhvLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKFxuICAgIGdldE91dHB1dFNjcmlwdCh3YWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpLnNjcmlwdFB1YktleSxcbiAgICBnZXRDb2luTmFtZShuZXR3b3JrKVxuICApO1xufVxuXG5mdW5jdGlvbiBtb2NrT3V0cHV0SWRGb3JBZGRyZXNzKGFkZHJlc3M6IHN0cmluZykge1xuICByZXR1cm4gZ2V0U2VlZChhZGRyZXNzKS50b1N0cmluZygnaGV4JykgKyAnOjEnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1dhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHsgaWQsIGNoYWluID0gZGVmYXVsdENoYWluLCBpbmRleCA9IDAsIHZhbHVlLCBhZGRyZXNzIH06IFBhcnRpYWw8V2FsbGV0VW5zcGVudDxUTnVtYmVyPj5cbik6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj4ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5zcGVudCB2YWx1ZSBtdXN0IGJlIHNldGApO1xuICB9XG4gIGlmIChjaGFpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnNwZW50IGNoYWluIG11c3QgYmUgc2V0YCk7XG4gIH1cbiAgY29uc3QgZGVyaXZlQWRkcmVzcyA9IGdldFdhbGxldEFkZHJlc3MobmV0d29yaywgd2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcbiAgaWYgKGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAhPT0gZGVyaXZlQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZXJpdmVkQWRkcmVzcyBtaXNtYXRjaDogJHthZGRyZXNzfSBkZXJpdmVkPSR7ZGVyaXZlQWRkcmVzc31gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWRkcmVzcyA9IGRlcml2ZUFkZHJlc3M7XG4gIH1cbiAgaWYgKCFpZCkge1xuICAgIGlkID0gbW9ja091dHB1dElkRm9yQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVW5zcGVudFJlcGxheVByb3RlY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgdmFsdWU6IFROdW1iZXJcbik6IFVuc3BlbnQ8VE51bWJlcj4ge1xuICBjb25zdCBjb2luTmFtZSA9IGdldENvaW5OYW1lKG5ldHdvcmspO1xuICBjb25zdCBhZGRyZXNzZXMgPSBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKGNvaW5OYW1lKTtcbiAgaWYgKGFkZHJlc3Nlcy5sZW5ndGgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gYWRkcmVzc2VzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogbW9ja091dHB1dElkRm9yQWRkcmVzcyhhZGRyZXNzKSxcbiAgICAgIGFkZHJlc3MsXG4gICAgICB2YWx1ZSxcbiAgICB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgJHt1dHhvbGliLmdldE5ldHdvcmtOYW1lKG5ldHdvcmspfSBoYXMgbm8gcmVwbGF5IHByb3RlY3Rpb24gdW5zcGV0bnNgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogQ2hhaW5Db2RlIHwgSW5wdXRTY3JpcHRUeXBlLFxuICBpbmRleDogbnVtYmVyLFxuICB2YWx1ZTogVE51bWJlclxuKTogVW5zcGVudDxUTnVtYmVyPiB7XG4gIGlmIChjaGFpbiA9PT0gJ3JlcGxheVByb3RlY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1vY2tVbnNwZW50UmVwbGF5UHJvdGVjdGlvbihuZXR3b3JrLCAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyA/IEJpZ0ludCgxMDAwKSA6IDEwMDApIGFzIFROdW1iZXIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtb2NrV2FsbGV0VW5zcGVudChuZXR3b3JrLCB3YWxsZXRLZXlzLCB7IGNoYWluOiBnZXRJbnRlcm5hbENoYWluQ29kZShjaGFpbiksIHZhbHVlLCBpbmRleCB9KTtcbiAgfVxufVxuIl19
111
+ /**
112
+ * Create unspent object from input script type, index, network and root wallet keys.
113
+ * Supports both utxolib and wasm-utxo RootWalletKeys.
114
+ */
115
+ function toUnspent(input, index, network, rootWalletKeys) {
116
+ const scriptType = input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType;
117
+ const chain = getInternalChainCode(scriptType);
118
+ return mockWalletUnspent(network, rootWalletKeys, {
119
+ chain,
120
+ index,
121
+ value: input.value,
122
+ });
123
+ }
124
+ /**
125
+ * Create a mock wallet unspent using wasm-utxo only (no utxolib dependency).
126
+ * Uses createMockPrevTx to generate a realistic txid for the unspent.
127
+ *
128
+ * This is useful for tests that need a valid unspent but don't require the prevTx buffer.
129
+ *
130
+ * @param address - The wallet address for the unspent
131
+ * @param chain - The derivation chain
132
+ * @param index - The derivation index
133
+ * @param value - The value in satoshis (bigint)
134
+ * @param network - The network to get the output script
135
+ * @returns WalletUnspent with a valid txid from a wasm-utxo generated transaction
136
+ */
137
+ function createWasmWalletUnspent(address, chain, index, value, network) {
138
+ // Get output script from address using correct wasm-utxo function
139
+ const outputScript = wasmUtxo.address.toOutputScriptWithCoin(address, toCoinName(network));
140
+ // Create a mock transaction with output at vout=0
141
+ const { txid } = createMockPrevTx(0, outputScript, BigInt(value));
142
+ return {
143
+ id: `${txid}:0`,
144
+ address,
145
+ chain,
146
+ index,
147
+ value,
148
+ };
149
+ }
150
+ /**
151
+ * Create a mock previous transaction using wasm-utxo's low-level Psbt class.
152
+ *
153
+ * Creates a valid transaction structure with:
154
+ * - A p2wpkh input (segwit, easy to construct)
155
+ * - Outputs including the target output at the specified vout
156
+ * - Reasonable fee rate (input value slightly higher than output sum)
157
+ *
158
+ * @param vout - The output index where the target output should be placed
159
+ * @param outputScript - The scriptPubKey for the target output
160
+ * @param value - The value in satoshis for the target output
161
+ * @returns Object with prevTx buffer and the transaction's txid
162
+ */
163
+ function createMockPrevTx(vout, outputScript, value) {
164
+ // Create a p2wpkh script for the dummy input
165
+ // p2wpkh: OP_0 <20-byte-hash> - we use a deterministic hash
166
+ const dummyHash = (0, sdk_test_1.getSeed)('mock-prev-tx-input').subarray(0, 20);
167
+ const p2wpkhScript = new Uint8Array([0x00, 0x14, ...dummyHash]);
168
+ // Calculate total output value
169
+ const dummyOutputValue = BigInt(1000); // 1000 satoshis per dummy output
170
+ const totalOutputValue = dummyOutputValue * BigInt(vout) + value;
171
+ // Input value = output value + small fee (1000 sat - reasonable fee)
172
+ const inputValue = totalOutputValue + BigInt(1000);
173
+ // Create PSBT using WrapPsbt (exported as Psbt)
174
+ const psbt = new wasmUtxo.Psbt(2, 0);
175
+ // Add dummy segwit input - p2wpkh
176
+ psbt.addInput('01'.repeat(32), // non-zero txid to avoid coinbase detection
177
+ 0, inputValue, p2wpkhScript);
178
+ // Add dummy outputs before the target vout
179
+ for (let i = 0; i < vout; i++) {
180
+ psbt.addOutput(p2wpkhScript, dummyOutputValue);
181
+ }
182
+ // Add the target output at the specified vout
183
+ psbt.addOutput(outputScript, value);
184
+ // Get the unsigned transaction bytes
185
+ // Note: This is a valid transaction structure without signatures
186
+ // For prevTx purposes, we just need the output scripts and values
187
+ const txBytes = psbt.getUnsignedTx();
188
+ // Parse with wasm-utxo Transaction to get the txid
189
+ const tx = wasmUtxo.Transaction.fromBytes(txBytes);
190
+ const txid = tx.getId();
191
+ return {
192
+ prevTx: Buffer.from(txBytes),
193
+ txid,
194
+ };
195
+ }
196
+ /**
197
+ * Create unspent with prevTx using wasm-utxo only (no utxolib dependency).
198
+ * The prevTx is built using wasm-utxo's low-level Psbt class.
199
+ *
200
+ * Key: The unspent id uses the actual txid from the generated prevTx,
201
+ * ensuring the MockRecoveryProvider returns the correct prevTx.
202
+ */
203
+ function toUnspentWithPrevTx(input, index, network, rootWalletKeys) {
204
+ const scriptType = input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType;
205
+ const chain = getInternalChainCode(scriptType);
206
+ const coinName = toCoinName(network);
207
+ // Get the output script for the wallet address
208
+ const outputScript = wasmUtxo.fixedScriptWallet.outputScript(rootWalletKeys, chain, index, coinName);
209
+ // Create mock prevTx with output at vout=0
210
+ const { prevTx, txid } = createMockPrevTx(0, outputScript, input.value);
211
+ // Get the wallet address
212
+ const address = (0, address_1.getWalletAddress)(toCoinName(network), rootWalletKeys, chain, index);
213
+ // Use the actual txid from the prevTx in the unspent id
214
+ return {
215
+ id: `${txid}:0`,
216
+ address,
217
+ chain,
218
+ index,
219
+ value: input.value,
220
+ prevTx,
221
+ };
222
+ }
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zcGVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdXRpbC91bnNwZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThDQSw4Q0E2QkM7QUFFRCxrRUFlQztBQUVELGtDQVlDO0FBTUQsOEJBYUM7QUFzQkQsMERBb0JDO0FBZUQsNENBaURDO0FBU0Qsa0RBNEJDO0FBNVFELHlEQUEyQztBQUMzQyw4Q0FBMEM7QUFDMUMsMkRBQTZDO0FBRTdDLHNDQUE0RDtBQUM1RCw4Q0FBb0Y7QUFHcEYsdUNBQTZDO0FBRTdDLE1BQU0sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBVXJGLFNBQVMsVUFBVSxDQUFDLE9BQW1CO0lBQ3JDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUEsc0JBQWMsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLElBQUEsbUJBQVcsRUFBQyxPQUFPLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBWUQsTUFBTSxZQUFZLEdBQWMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFckUsU0FBUyxzQkFBc0IsQ0FBQyxPQUFlO0lBQzdDLE9BQU8sSUFBQSxrQkFBTyxFQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQWdCLGlCQUFpQixDQUMvQixPQUFtQixFQUNuQixVQUEwQixFQUMxQixFQUFFLEVBQUUsRUFBRSxLQUFLLEdB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R0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFckMsK0NBQStDO0lBQy9DLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFckcsMkNBQTJDO0lBQzNDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEUseUJBQXlCO0lBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUEsMEJBQWdCLEVBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFcEYsd0RBQXdEO0lBQ3hELE9BQU87UUFDTCxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUk7UUFDZixPQUFPO1FBQ1AsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgZ2V0U2VlZCB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgKiBhcyB3YXNtVXR4byBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRDb2luTmFtZSwgaXNVdHhvQ29pbk5hbWUsIHR5cGUgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vLi4vc3JjL25hbWVzJztcbmltcG9ydCB0eXBlIHsgVW5zcGVudCwgVW5zcGVudFdpdGhQcmV2VHgsIFdhbGxldFVuc3BlbnQgfSBmcm9tICcuLi8uLi8uLi9zcmMvdW5zcGVudCc7XG5cbmltcG9ydCB7IGdldFdhbGxldEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MnO1xuXG5jb25zdCB7IGNoYWluQ29kZXNQMnNoLCBnZXRFeHRlcm5hbENoYWluQ29kZSwgZ2V0SW50ZXJuYWxDaGFpbkNvZGUgfSA9IHV0eG9saWIuYml0Z287XG5cbmV4cG9ydCB0eXBlIFV0eG9saWJSb290V2FsbGV0S2V5cyA9IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXM7XG5leHBvcnQgdHlwZSBXYXNtUm9vdFdhbGxldEtleXMgPSB3YXNtVXR4by5maXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cztcbmV4cG9ydCB0eXBlIFJvb3RXYWxsZXRLZXlzID0gVXR4b2xpYlJvb3RXYWxsZXRLZXlzIHwgV2FzbVJvb3RXYWxsZXRLZXlzO1xudHlwZSBDaGFpbkNvZGUgPSB1dHhvbGliLmJpdGdvLkNoYWluQ29kZTtcblxuLyoqIEFjY2VwdCBlaXRoZXIgYSBjb2luIG5hbWUgc3RyaW5nIG9yIGEgdXR4b2xpYi5OZXR3b3JrIG9iamVjdCAqL1xuZXhwb3J0IHR5cGUgTmV0d29ya0FyZyA9IHN0cmluZyB8IHV0eG9saWIuTmV0d29yaztcblxuZnVuY3Rpb24gdG9Db2luTmFtZShuZXR3b3JrOiBOZXR3b3JrQXJnKTogVXR4b0NvaW5OYW1lIHtcbiAgaWYgKHR5cGVvZiBuZXR3b3JrID09PSAnc3RyaW5nJykge1xuICAgIGlmICghaXNVdHhvQ29pbk5hbWUobmV0d29yaykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm90IGEgdmFsaWQgY29pbiBuYW1lOiAke25ldHdvcmt9YCk7XG4gICAgfVxuICAgIHJldHVybiBuZXR3b3JrO1xuICB9XG4gIHJldHVybiBnZXRDb2luTmFtZShuZXR3b3JrKTtcbn1cblxuZXhwb3J0IHR5cGUgSW5wdXRTY3JpcHRUeXBlID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzIHwgJ3JlcGxheVByb3RlY3Rpb24nO1xuXG4vKipcbiAqIElucHV0IGRlZmluaXRpb24gZm9yIHRvVW5zcGVudCBmdW5jdGlvblxuICovXG5leHBvcnQgdHlwZSBJbnB1dCA9IHtcbiAgc2NyaXB0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzIHwgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuICB2YWx1ZTogYmlnaW50O1xufTtcblxuY29uc3QgZGVmYXVsdENoYWluOiBDaGFpbkNvZGUgPSBnZXRFeHRlcm5hbENoYWluQ29kZShjaGFpbkNvZGVzUDJzaCk7XG5cbmZ1bmN0aW9uIG1vY2tPdXRwdXRJZEZvckFkZHJlc3MoYWRkcmVzczogc3RyaW5nKSB7XG4gIHJldHVybiBnZXRTZWVkKGFkZHJlc3MpLnRvU3RyaW5nKCdoZXgnKSArICc6MSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrV2FsbGV0VW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogTmV0d29ya0FyZyxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHsgaWQsIGNoYWluID0gZGVmYXVsdENoYWluLCBpbmRleCA9IDAsIHZhbHVlLCBhZGRyZXNzIH06IFBhcnRpYWw8V2FsbGV0VW5zcGVudDxUTnVtYmVyPj5cbik6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj4ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5zcGVudCB2YWx1ZSBtdXN0IGJlIHNldGApO1xuICB9XG4gIGlmIChjaGFpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnNwZW50IGNoYWluIG11c3QgYmUgc2V0YCk7XG4gIH1cbiAgY29uc3QgZGVyaXZlQWRkcmVzcyA9IGdldFdhbGxldEFkZHJlc3ModG9Db2luTmFtZShuZXR3b3JrKSwgd2FsbGV0S2V5cywgY2hhaW4sIGluZGV4KTtcbiAgaWYgKGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAhPT0gZGVyaXZlQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZXJpdmVkQWRkcmVzcyBtaXNtYXRjaDogJHthZGRyZXNzfSBkZXJpdmVkPSR7ZGVyaXZlQWRkcmVzc31gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWRkcmVzcyA9IGRlcml2ZUFkZHJlc3M7XG4gIH1cbiAgaWYgKCFpZCkge1xuICAgIGlkID0gbW9ja091dHB1dElkRm9yQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVW5zcGVudFJlcGxheVByb3RlY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIG5ldHdvcms6IE5ldHdvcmtBcmcsXG4gIHZhbHVlOiBUTnVtYmVyXG4pOiBVbnNwZW50PFROdW1iZXI+IHtcbiAgY29uc3QgY29pbk5hbWUgPSB0b0NvaW5OYW1lKG5ldHdvcmspO1xuICBjb25zdCBhZGRyZXNzZXMgPSBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKGNvaW5OYW1lKTtcbiAgaWYgKGFkZHJlc3Nlcy5sZW5ndGgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gYWRkcmVzc2VzWzBdO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogbW9ja091dHB1dElkRm9yQWRkcmVzcyhhZGRyZXNzKSxcbiAgICAgIGFkZHJlc3MsXG4gICAgICB2YWx1ZSxcbiAgICB9O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgJHtjb2luTmFtZX0gaGFzIG5vIHJlcGxheSBwcm90ZWN0aW9uIHVuc3BlbnRzYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgbmV0d29yazogTmV0d29ya0FyZyxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIGNoYWluOiBDaGFpbkNvZGUgfCBJbnB1dFNjcmlwdFR5cGUsXG4gIGluZGV4OiBudW1iZXIsXG4gIHZhbHVlOiBUTnVtYmVyXG4pOiBVbnNwZW50PFROdW1iZXI+IHtcbiAgaWYgKGNoYWluID09PSAncmVwbGF5UHJvdGVjdGlvbicpIHtcbiAgICByZXR1cm4gbW9ja1Vuc3BlbnRSZXBsYXlQcm90ZWN0aW9uKG5ldHdvcmssICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnID8gQmlnSW50KDEwMDApIDogMTAwMCkgYXMgVE51bWJlcik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1vY2tXYWxsZXRVbnNwZW50KG5ldHdvcmssIHdhbGxldEtleXMsIHsgY2hhaW46IGdldEludGVybmFsQ2hhaW5Db2RlKGNoYWluKSwgdmFsdWUsIGluZGV4IH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIHVuc3BlbnQgb2JqZWN0IGZyb20gaW5wdXQgc2NyaXB0IHR5cGUsIGluZGV4LCBuZXR3b3JrIGFuZCByb290IHdhbGxldCBrZXlzLlxuICogU3VwcG9ydHMgYm90aCB1dHhvbGliIGFuZCB3YXNtLXV0eG8gUm9vdFdhbGxldEtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Vuc3BlbnQoXG4gIGlucHV0OiBJbnB1dCxcbiAgaW5kZXg6IG51bWJlcixcbiAgbmV0d29yazogTmV0d29ya0FyZyxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzXG4pOiBXYWxsZXRVbnNwZW50PGJpZ2ludD4ge1xuICBjb25zdCBzY3JpcHRUeXBlID0gaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnID8gJ3AydHJNdXNpZzInIDogaW5wdXQuc2NyaXB0VHlwZTtcbiAgY29uc3QgY2hhaW4gPSBnZXRJbnRlcm5hbENoYWluQ29kZShzY3JpcHRUeXBlKTtcbiAgcmV0dXJuIG1vY2tXYWxsZXRVbnNwZW50KG5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCB7XG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWU6IGlucHV0LnZhbHVlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBXYWxsZXQgdW5zcGVudCB3aXRoIHByZXZUeCAtIGNvbWJpbmVzIFdhbGxldFVuc3BlbnQgYW5kIFVuc3BlbnRXaXRoUHJldlR4XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FsbGV0VW5zcGVudFdpdGhQcmV2VHg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+LFxuICAgIFVuc3BlbnRXaXRoUHJldlR4PFROdW1iZXI+IHt9XG5cbi8qKlxuICogQ3JlYXRlIGEgbW9jayB3YWxsZXQgdW5zcGVudCB1c2luZyB3YXNtLXV0eG8gb25seSAobm8gdXR4b2xpYiBkZXBlbmRlbmN5KS5cbiAqIFVzZXMgY3JlYXRlTW9ja1ByZXZUeCB0byBnZW5lcmF0ZSBhIHJlYWxpc3RpYyB0eGlkIGZvciB0aGUgdW5zcGVudC5cbiAqXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdHMgdGhhdCBuZWVkIGEgdmFsaWQgdW5zcGVudCBidXQgZG9uJ3QgcmVxdWlyZSB0aGUgcHJldlR4IGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gYWRkcmVzcyAtIFRoZSB3YWxsZXQgYWRkcmVzcyBmb3IgdGhlIHVuc3BlbnRcbiAqIEBwYXJhbSBjaGFpbiAtIFRoZSBkZXJpdmF0aW9uIGNoYWluXG4gKiBAcGFyYW0gaW5kZXggLSBUaGUgZGVyaXZhdGlvbiBpbmRleFxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIGluIHNhdG9zaGlzIChiaWdpbnQpXG4gKiBAcGFyYW0gbmV0d29yayAtIFRoZSBuZXR3b3JrIHRvIGdldCB0aGUgb3V0cHV0IHNjcmlwdFxuICogQHJldHVybnMgV2FsbGV0VW5zcGVudCB3aXRoIGEgdmFsaWQgdHhpZCBmcm9tIGEgd2FzbS11dHhvIGdlbmVyYXRlZCB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FzbVdhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IGJpZ2ludD4oXG4gIGFkZHJlc3M6IHN0cmluZyxcbiAgY2hhaW46IENoYWluQ29kZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgdmFsdWU6IFROdW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmtBcmdcbik6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj4ge1xuICAvLyBHZXQgb3V0cHV0IHNjcmlwdCBmcm9tIGFkZHJlc3MgdXNpbmcgY29ycmVjdCB3YXNtLXV0eG8gZnVuY3Rpb25cbiAgY29uc3Qgb3V0cHV0U2NyaXB0ID0gd2FzbVV0eG8uYWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKGFkZHJlc3MsIHRvQ29pbk5hbWUobmV0d29yaykpO1xuXG4gIC8vIENyZWF0ZSBhIG1vY2sgdHJhbnNhY3Rpb24gd2l0aCBvdXRwdXQgYXQgdm91dD0wXG4gIGNvbnN0IHsgdHhpZCB9ID0gY3JlYXRlTW9ja1ByZXZUeCgwLCBvdXRwdXRTY3JpcHQsIEJpZ0ludCh2YWx1ZSkpO1xuXG4gIHJldHVybiB7XG4gICAgaWQ6IGAke3R4aWR9OjBgLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWUsXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbW9jayBwcmV2aW91cyB0cmFuc2FjdGlvbiB1c2luZyB3YXNtLXV0eG8ncyBsb3ctbGV2ZWwgUHNidCBjbGFzcy5cbiAqXG4gKiBDcmVhdGVzIGEgdmFsaWQgdHJhbnNhY3Rpb24gc3RydWN0dXJlIHdpdGg6XG4gKiAtIEEgcDJ3cGtoIGlucHV0IChzZWd3aXQsIGVhc3kgdG8gY29uc3RydWN0KVxuICogLSBPdXRwdXRzIGluY2x1ZGluZyB0aGUgdGFyZ2V0IG91dHB1dCBhdCB0aGUgc3BlY2lmaWVkIHZvdXRcbiAqIC0gUmVhc29uYWJsZSBmZWUgcmF0ZSAoaW5wdXQgdmFsdWUgc2xpZ2h0bHkgaGlnaGVyIHRoYW4gb3V0cHV0IHN1bSlcbiAqXG4gKiBAcGFyYW0gdm91dCAtIFRoZSBvdXRwdXQgaW5kZXggd2hlcmUgdGhlIHRhcmdldCBvdXRwdXQgc2hvdWxkIGJlIHBsYWNlZFxuICogQHBhcmFtIG91dHB1dFNjcmlwdCAtIFRoZSBzY3JpcHRQdWJLZXkgZm9yIHRoZSB0YXJnZXQgb3V0cHV0XG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgaW4gc2F0b3NoaXMgZm9yIHRoZSB0YXJnZXQgb3V0cHV0XG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBwcmV2VHggYnVmZmVyIGFuZCB0aGUgdHJhbnNhY3Rpb24ncyB0eGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrUHJldlR4KFxuICB2b3V0OiBudW1iZXIsXG4gIG91dHB1dFNjcmlwdDogVWludDhBcnJheSxcbiAgdmFsdWU6IGJpZ2ludFxuKTogeyBwcmV2VHg6IEJ1ZmZlcjsgdHhpZDogc3RyaW5nIH0ge1xuICAvLyBDcmVhdGUgYSBwMndwa2ggc2NyaXB0IGZvciB0aGUgZHVtbXkgaW5wdXRcbiAgLy8gcDJ3cGtoOiBPUF8wIDwyMC1ieXRlLWhhc2g+IC0gd2UgdXNlIGEgZGV0ZXJtaW5pc3RpYyBoYXNoXG4gIGNvbnN0IGR1bW15SGFzaCA9IGdldFNlZWQoJ21vY2stcHJldi10eC1pbnB1dCcpLnN1YmFycmF5KDAsIDIwKTtcbiAgY29uc3QgcDJ3cGtoU2NyaXB0ID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MTQsIC4uLmR1bW15SGFzaF0pO1xuXG4gIC8vIENhbGN1bGF0ZSB0b3RhbCBvdXRwdXQgdmFsdWVcbiAgY29uc3QgZHVtbXlPdXRwdXRWYWx1ZSA9IEJpZ0ludCgxMDAwKTsgLy8gMTAwMCBzYXRvc2hpcyBwZXIgZHVtbXkgb3V0cHV0XG4gIGNvbnN0IHRvdGFsT3V0cHV0VmFsdWUgPSBkdW1teU91dHB1dFZhbHVlICogQmlnSW50KHZvdXQpICsgdmFsdWU7XG5cbiAgLy8gSW5wdXQgdmFsdWUgPSBvdXRwdXQgdmFsdWUgKyBzbWFsbCBmZWUgKDEwMDAgc2F0IC0gcmVhc29uYWJsZSBmZWUpXG4gIGNvbnN0IGlucHV0VmFsdWUgPSB0b3RhbE91dHB1dFZhbHVlICsgQmlnSW50KDEwMDApO1xuXG4gIC8vIENyZWF0ZSBQU0JUIHVzaW5nIFdyYXBQc2J0IChleHBvcnRlZCBhcyBQc2J0KVxuICBjb25zdCBwc2J0ID0gbmV3IHdhc21VdHhvLlBzYnQoMiwgMCk7XG5cbiAgLy8gQWRkIGR1bW15IHNlZ3dpdCBpbnB1dCAtIHAyd3BraFxuICBwc2J0LmFkZElucHV0KFxuICAgICcwMScucmVwZWF0KDMyKSwgLy8gbm9uLXplcm8gdHhpZCB0byBhdm9pZCBjb2luYmFzZSBkZXRlY3Rpb25cbiAgICAwLFxuICAgIGlucHV0VmFsdWUsXG4gICAgcDJ3cGtoU2NyaXB0XG4gICk7XG5cbiAgLy8gQWRkIGR1bW15IG91dHB1dHMgYmVmb3JlIHRoZSB0YXJnZXQgdm91dFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZvdXQ7IGkrKykge1xuICAgIHBzYnQuYWRkT3V0cHV0KHAyd3BraFNjcmlwdCwgZHVtbXlPdXRwdXRWYWx1ZSk7XG4gIH1cblxuICAvLyBBZGQgdGhlIHRhcmdldCBvdXRwdXQgYXQgdGhlIHNwZWNpZmllZCB2b3V0XG4gIHBzYnQuYWRkT3V0cHV0KG91dHB1dFNjcmlwdCwgdmFsdWUpO1xuXG4gIC8vIEdldCB0aGUgdW5zaWduZWQgdHJhbnNhY3Rpb24gYnl0ZXNcbiAgLy8gTm90ZTogVGhpcyBpcyBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0cnVjdHVyZSB3aXRob3V0IHNpZ25hdHVyZXNcbiAgLy8gRm9yIHByZXZUeCBwdXJwb3Nlcywgd2UganVzdCBuZWVkIHRoZSBvdXRwdXQgc2NyaXB0cyBhbmQgdmFsdWVzXG4gIGNvbnN0IHR4Qnl0ZXMgPSBwc2J0LmdldFVuc2lnbmVkVHgoKTtcblxuICAvLyBQYXJzZSB3aXRoIHdhc20tdXR4byBUcmFuc2FjdGlvbiB0byBnZXQgdGhlIHR4aWRcbiAgY29uc3QgdHggPSB3YXNtVXR4by5UcmFuc2FjdGlvbi5mcm9tQnl0ZXModHhCeXRlcyk7XG4gIGNvbnN0IHR4aWQgPSB0eC5nZXRJZCgpO1xuXG4gIHJldHVybiB7XG4gICAgcHJldlR4OiBCdWZmZXIuZnJvbSh0eEJ5dGVzKSxcbiAgICB0eGlkLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSB1bnNwZW50IHdpdGggcHJldlR4IHVzaW5nIHdhc20tdXR4byBvbmx5IChubyB1dHhvbGliIGRlcGVuZGVuY3kpLlxuICogVGhlIHByZXZUeCBpcyBidWlsdCB1c2luZyB3YXNtLXV0eG8ncyBsb3ctbGV2ZWwgUHNidCBjbGFzcy5cbiAqXG4gKiBLZXk6IFRoZSB1bnNwZW50IGlkIHVzZXMgdGhlIGFjdHVhbCB0eGlkIGZyb20gdGhlIGdlbmVyYXRlZCBwcmV2VHgsXG4gKiBlbnN1cmluZyB0aGUgTW9ja1JlY292ZXJ5UHJvdmlkZXIgcmV0dXJucyB0aGUgY29ycmVjdCBwcmV2VHguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Vuc3BlbnRXaXRoUHJldlR4KFxuICBpbnB1dDogSW5wdXQsXG4gIGluZGV4OiBudW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmtBcmcsXG4gIHJvb3RXYWxsZXRLZXlzOiBXYXNtUm9vdFdhbGxldEtleXNcbik6IFdhbGxldFVuc3BlbnRXaXRoUHJldlR4PGJpZ2ludD4ge1xuICBjb25zdCBzY3JpcHRUeXBlID0gaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnID8gJ3AydHJNdXNpZzInIDogaW5wdXQuc2NyaXB0VHlwZTtcbiAgY29uc3QgY2hhaW4gPSBnZXRJbnRlcm5hbENoYWluQ29kZShzY3JpcHRUeXBlKTtcbiAgY29uc3QgY29pbk5hbWUgPSB0b0NvaW5OYW1lKG5ldHdvcmspO1xuXG4gIC8vIEdldCB0aGUgb3V0cHV0IHNjcmlwdCBmb3IgdGhlIHdhbGxldCBhZGRyZXNzXG4gIGNvbnN0IG91dHB1dFNjcmlwdCA9IHdhc21VdHhvLmZpeGVkU2NyaXB0V2FsbGV0Lm91dHB1dFNjcmlwdChyb290V2FsbGV0S2V5cywgY2hhaW4sIGluZGV4LCBjb2luTmFtZSk7XG5cbiAgLy8gQ3JlYXRlIG1vY2sgcHJldlR4IHdpdGggb3V0cHV0IGF0IHZvdXQ9MFxuICBjb25zdCB7IHByZXZUeCwgdHhpZCB9ID0gY3JlYXRlTW9ja1ByZXZUeCgwLCBvdXRwdXRTY3JpcHQsIGlucHV0LnZhbHVlKTtcblxuICAvLyBHZXQgdGhlIHdhbGxldCBhZGRyZXNzXG4gIGNvbnN0IGFkZHJlc3MgPSBnZXRXYWxsZXRBZGRyZXNzKHRvQ29pbk5hbWUobmV0d29yayksIHJvb3RXYWxsZXRLZXlzLCBjaGFpbiwgaW5kZXgpO1xuXG4gIC8vIFVzZSB0aGUgYWN0dWFsIHR4aWQgZnJvbSB0aGUgcHJldlR4IGluIHRoZSB1bnNwZW50IGlkXG4gIHJldHVybiB7XG4gICAgaWQ6IGAke3R4aWR9OjBgLFxuICAgIGFkZHJlc3MsXG4gICAgY2hhaW4sXG4gICAgaW5kZXgsXG4gICAgdmFsdWU6IGlucHV0LnZhbHVlLFxuICAgIHByZXZUeCxcbiAgfTtcbn1cbiJdfQ==
@@ -3,6 +3,19 @@ import { BitGoAPI } from '@bitgo/sdk-api';
3
3
  import { AbstractUtxoCoin } from '../../../src';
4
4
  export declare const defaultBitGo: import("@bitgo/sdk-test").TestableBG & BitGoAPI;
5
5
  export declare const utxoCoins: AbstractUtxoCoin[];
6
+ /**
7
+ * Minimal subset of coins for comprehensive test coverage.
8
+ * - btc: Full feature set (segwit, taproot, musig2)
9
+ * - bch: replay protection addresses
10
+ * - zec: special transaction format (Overwinter/Sapling)
11
+ */
12
+ export declare const minUtxoCoinNames: readonly ["btc", "bch", "zec"];
13
+ /**
14
+ * Get minimal set of coins for testing. Covers ~99% of feature paths.
15
+ */
16
+ export declare function getMinUtxoCoins(): AbstractUtxoCoin[];
6
17
  export declare function getUtxoCoin(name: string): AbstractUtxoCoin;
7
18
  export declare function getUtxoCoinForNetwork(n: utxolib.Network): AbstractUtxoCoin;
19
+ export type TxFormat = 'legacy' | 'psbt';
20
+ export declare function getScriptTypes(coin: AbstractUtxoCoin, txFormat: TxFormat): utxolib.testutil.InputScriptType[];
8
21
  //# sourceMappingURL=utxoCoins.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utxoCoins.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/utxoCoins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EACL,gBAAgB,EAqBjB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,YAAY,iDAAgD,CAAC;AAqC1E,eAAO,MAAM,SAAS,oBAAiB,CAAC;AAExC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAO1D;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB,CAO1E"}
1
+ {"version":3,"file":"utxoCoins.d.ts","sourceRoot":"","sources":["../../../../../test/unit/util/utxoCoins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EACL,gBAAgB,EAsBjB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,YAAY,iDAAgD,CAAC;AAqC1E,eAAO,MAAM,SAAS,oBAAiB,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,gCAAiC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,EAAE,CAEpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAO1D;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB,CAO1E;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzC,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,CAiB7G"}
@@ -33,9 +33,11 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.utxoCoins = exports.defaultBitGo = void 0;
36
+ exports.minUtxoCoinNames = exports.utxoCoins = exports.defaultBitGo = void 0;
37
+ exports.getMinUtxoCoins = getMinUtxoCoins;
37
38
  exports.getUtxoCoin = getUtxoCoin;
38
39
  exports.getUtxoCoinForNetwork = getUtxoCoinForNetwork;
40
+ exports.getScriptTypes = getScriptTypes;
39
41
  const utxolib = __importStar(require("@bitgo/utxo-lib"));
40
42
  const sdk_api_1 = require("@bitgo/sdk-api");
41
43
  const sdk_test_1 = require("@bitgo/sdk-test");
@@ -76,6 +78,19 @@ function getUtxoCoins(bitgo = exports.defaultBitGo) {
76
78
  .sort((a, b) => utxolib.getNetworkList().indexOf(a.network) - utxolib.getNetworkList().indexOf(b.network));
77
79
  }
78
80
  exports.utxoCoins = getUtxoCoins();
81
+ /**
82
+ * Minimal subset of coins for comprehensive test coverage.
83
+ * - btc: Full feature set (segwit, taproot, musig2)
84
+ * - bch: replay protection addresses
85
+ * - zec: special transaction format (Overwinter/Sapling)
86
+ */
87
+ exports.minUtxoCoinNames = ['btc', 'bch', 'zec'];
88
+ /**
89
+ * Get minimal set of coins for testing. Covers ~99% of feature paths.
90
+ */
91
+ function getMinUtxoCoins() {
92
+ return exports.minUtxoCoinNames.map(getUtxoCoin);
93
+ }
79
94
  function getUtxoCoin(name) {
80
95
  for (const c of exports.utxoCoins) {
81
96
  if (c.getChain() === name) {
@@ -92,4 +107,20 @@ function getUtxoCoinForNetwork(n) {
92
107
  }
93
108
  throw new Error(`no coin for network ${utxolib.getNetworkName(n)}`);
94
109
  }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b0NvaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3V0aWwvdXR4b0NvaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1FQSxrQ0FPQztBQUVELHNEQU9DO0FBbkZELHlEQUEyQztBQUMzQyw0Q0FBMEM7QUFDMUMsOENBQTRDO0FBRTVDLHNDQXNCc0I7QUFFVCxRQUFBLFlBQVksR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFFMUUsTUFBTSxlQUFlLEdBQUc7SUFDdEIsU0FBRztJQUNILFVBQUk7SUFDSixXQUFLO0lBQ0wsYUFBTztJQUNQLGVBQVM7SUFDVCxTQUFHO0lBQ0gsVUFBSTtJQUNKLFVBQUk7SUFDSixXQUFLO0lBQ0wsU0FBRztJQUNILFVBQUk7SUFDSixTQUFHO0lBQ0gsU0FBRztJQUNILFVBQUk7SUFDSixVQUFJO0lBQ0osV0FBSztJQUNMLFVBQUk7SUFDSixXQUFLO0lBQ0wsU0FBRztJQUNILFVBQUk7Q0FDTCxDQUFDO0FBRUYsU0FBUyxZQUFZLENBQUMsUUFBa0Isb0JBQVk7SUFDbEQsT0FBTyxlQUFlO1NBQ25CLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBb0IsRUFBRTtRQUM3QixJQUFJLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDL0csQ0FBQztBQUVZLFFBQUEsU0FBUyxHQUFHLFlBQVksRUFBRSxDQUFDO0FBRXhDLFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLEtBQUssTUFBTSxDQUFDLElBQUksaUJBQVMsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxDQUFrQjtJQUN0RCxLQUFLLE1BQU0sQ0FBQyxJQUFJLGlCQUFTLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbyB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5cbmltcG9ydCB7XG4gIEFic3RyYWN0VXR4b0NvaW4sXG4gIEJ0YyxcbiAgVGJ0YyxcbiAgVGJ0YzQsXG4gIFRidGNzaWcsXG4gIFRidGNiZ3NpZyxcbiAgQmNoLFxuICBUYmNoLFxuICBCY2hhLFxuICBUYmNoYSxcbiAgQnN2LFxuICBUYnN2LFxuICBCdGcsXG4gIEx0YyxcbiAgVGx0YyxcbiAgRGFzaCxcbiAgVGRhc2gsXG4gIERvZ2UsXG4gIFRkb2dlLFxuICBaZWMsXG4gIFR6ZWMsXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0Qml0R28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG5cbmNvbnN0IHV0eG9Db2luQ2xhc3NlcyA9IFtcbiAgQnRjLFxuICBUYnRjLFxuICBUYnRjNCxcbiAgVGJ0Y3NpZyxcbiAgVGJ0Y2Jnc2lnLFxuICBCY2gsXG4gIFRiY2gsXG4gIEJjaGEsXG4gIFRiY2hhLFxuICBCc3YsXG4gIFRic3YsXG4gIEJ0ZyxcbiAgTHRjLFxuICBUbHRjLFxuICBEYXNoLFxuICBUZGFzaCxcbiAgRG9nZSxcbiAgVGRvZ2UsXG4gIFplYyxcbiAgVHplYyxcbl07XG5cbmZ1bmN0aW9uIGdldFV0eG9Db2lucyhiaXRnbzogQml0R29BUEkgPSBkZWZhdWx0Qml0R28pOiBBYnN0cmFjdFV0eG9Db2luW10ge1xuICByZXR1cm4gdXR4b0NvaW5DbGFzc2VzXG4gICAgLm1hcCgoY2xzKTogQWJzdHJhY3RVdHhvQ29pbiA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2xzLmNyZWF0ZUluc3RhbmNlKGJpdGdvKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBlcnJvciBjcmVhdGluZyAke2Nscy5uYW1lfTogJHtlfWApO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+IHV0eG9saWIuZ2V0TmV0d29ya0xpc3QoKS5pbmRleE9mKGEubmV0d29yaykgLSB1dHhvbGliLmdldE5ldHdvcmtMaXN0KCkuaW5kZXhPZihiLm5ldHdvcmspKTtcbn1cblxuZXhwb3J0IGNvbnN0IHV0eG9Db2lucyA9IGdldFV0eG9Db2lucygpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXR4b0NvaW4obmFtZTogc3RyaW5nKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5nZXRDaGFpbigpID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIHdpdGggbmFtZSAke25hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVdHhvQ29pbkZvck5ldHdvcmsobjogdXR4b2xpYi5OZXR3b3JrKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5uZXR3b3JrID09PSBuKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIGZvciBuZXR3b3JrICR7dXR4b2xpYi5nZXROZXR3b3JrTmFtZShuKX1gKTtcbn1cbiJdfQ==
110
+ function getScriptTypes(coin, txFormat) {
111
+ return ['p2shP2pk', 'p2sh', 'p2shP2wsh', 'p2wsh', 'p2tr', 'p2trMusig2', 'taprootKeyPathSpend'].filter((t) => {
112
+ if (t === 'p2shP2pk') {
113
+ return (0, src_1.getReplayProtectionAddresses)(coin.name).length > 0;
114
+ }
115
+ if (txFormat === 'legacy') {
116
+ if (t === 'p2tr' || t === 'p2trMusig2' || t === 'taprootKeyPathSpend') {
117
+ return false;
118
+ }
119
+ }
120
+ if (t === 'taprootKeyPathSpend') {
121
+ return coin.supportsAddressType('p2trMusig2');
122
+ }
123
+ return coin.supportsAddressType(t);
124
+ });
125
+ }
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXR4b0NvaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3V0aWwvdXR4b0NvaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStFQSwwQ0FFQztBQUVELGtDQU9DO0FBRUQsc0RBT0M7QUFJRCx3Q0FpQkM7QUF4SEQseURBQTJDO0FBQzNDLDRDQUEwQztBQUMxQyw4Q0FBNEM7QUFFNUMsc0NBdUJzQjtBQUVULFFBQUEsWUFBWSxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUUxRSxNQUFNLGVBQWUsR0FBRztJQUN0QixTQUFHO0lBQ0gsVUFBSTtJQUNKLFdBQUs7SUFDTCxhQUFPO0lBQ1AsZUFBUztJQUNULFNBQUc7SUFDSCxVQUFJO0lBQ0osVUFBSTtJQUNKLFdBQUs7SUFDTCxTQUFHO0lBQ0gsVUFBSTtJQUNKLFNBQUc7SUFDSCxTQUFHO0lBQ0gsVUFBSTtJQUNKLFVBQUk7SUFDSixXQUFLO0lBQ0wsVUFBSTtJQUNKLFdBQUs7SUFDTCxTQUFHO0lBQ0gsVUFBSTtDQUNMLENBQUM7QUFFRixTQUFTLFlBQVksQ0FBQyxRQUFrQixvQkFBWTtJQUNsRCxPQUFPLGVBQWU7U0FDbkIsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFvQixFQUFFO1FBQzdCLElBQUksQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMvRyxDQUFDO0FBRVksUUFBQSxTQUFTLEdBQUcsWUFBWSxFQUFFLENBQUM7QUFFeEM7Ozs7O0dBS0c7QUFDVSxRQUFBLGdCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQVUsQ0FBQztBQUUvRDs7R0FFRztBQUNILFNBQWdCLGVBQWU7SUFDN0IsT0FBTyx3QkFBZ0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLEtBQUssTUFBTSxDQUFDLElBQUksaUJBQVMsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxDQUFrQjtJQUN0RCxLQUFLLE1BQU0sQ0FBQyxJQUFJLGlCQUFTLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFJRCxTQUFnQixjQUFjLENBQUMsSUFBc0IsRUFBRSxRQUFrQjtJQUN2RSxPQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUscUJBQXFCLENBQVcsQ0FBQyxNQUFNLENBQzlHLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDSixJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUEsa0NBQTRCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO2dCQUN0RSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztZQUNoQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdFV0eG9Db2luLFxuICBCdGMsXG4gIFRidGMsXG4gIFRidGM0LFxuICBUYnRjc2lnLFxuICBUYnRjYmdzaWcsXG4gIEJjaCxcbiAgVGJjaCxcbiAgQmNoYSxcbiAgVGJjaGEsXG4gIEJzdixcbiAgVGJzdixcbiAgQnRnLFxuICBMdGMsXG4gIFRsdGMsXG4gIERhc2gsXG4gIFRkYXNoLFxuICBEb2dlLFxuICBUZG9nZSxcbiAgWmVjLFxuICBUemVjLFxuICBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzLFxufSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEJpdEdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuXG5jb25zdCB1dHhvQ29pbkNsYXNzZXMgPSBbXG4gIEJ0YyxcbiAgVGJ0YyxcbiAgVGJ0YzQsXG4gIFRidGNzaWcsXG4gIFRidGNiZ3NpZyxcbiAgQmNoLFxuICBUYmNoLFxuICBCY2hhLFxuICBUYmNoYSxcbiAgQnN2LFxuICBUYnN2LFxuICBCdGcsXG4gIEx0YyxcbiAgVGx0YyxcbiAgRGFzaCxcbiAgVGRhc2gsXG4gIERvZ2UsXG4gIFRkb2dlLFxuICBaZWMsXG4gIFR6ZWMsXG5dO1xuXG5mdW5jdGlvbiBnZXRVdHhvQ29pbnMoYml0Z286IEJpdEdvQVBJID0gZGVmYXVsdEJpdEdvKTogQWJzdHJhY3RVdHhvQ29pbltdIHtcbiAgcmV0dXJuIHV0eG9Db2luQ2xhc3Nlc1xuICAgIC5tYXAoKGNscyk6IEFic3RyYWN0VXR4b0NvaW4gPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNscy5jcmVhdGVJbnN0YW5jZShiaXRnbyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZXJyb3IgY3JlYXRpbmcgJHtjbHMubmFtZX06ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5zb3J0KChhLCBiKSA9PiB1dHhvbGliLmdldE5ldHdvcmtMaXN0KCkuaW5kZXhPZihhLm5ldHdvcmspIC0gdXR4b2xpYi5nZXROZXR3b3JrTGlzdCgpLmluZGV4T2YoYi5uZXR3b3JrKSk7XG59XG5cbmV4cG9ydCBjb25zdCB1dHhvQ29pbnMgPSBnZXRVdHhvQ29pbnMoKTtcblxuLyoqXG4gKiBNaW5pbWFsIHN1YnNldCBvZiBjb2lucyBmb3IgY29tcHJlaGVuc2l2ZSB0ZXN0IGNvdmVyYWdlLlxuICogLSBidGM6IEZ1bGwgZmVhdHVyZSBzZXQgKHNlZ3dpdCwgdGFwcm9vdCwgbXVzaWcyKVxuICogLSBiY2g6IHJlcGxheSBwcm90ZWN0aW9uIGFkZHJlc3Nlc1xuICogLSB6ZWM6IHNwZWNpYWwgdHJhbnNhY3Rpb24gZm9ybWF0IChPdmVyd2ludGVyL1NhcGxpbmcpXG4gKi9cbmV4cG9ydCBjb25zdCBtaW5VdHhvQ29pbk5hbWVzID0gWydidGMnLCAnYmNoJywgJ3plYyddIGFzIGNvbnN0O1xuXG4vKipcbiAqIEdldCBtaW5pbWFsIHNldCBvZiBjb2lucyBmb3IgdGVzdGluZy4gQ292ZXJzIH45OSUgb2YgZmVhdHVyZSBwYXRocy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1pblV0eG9Db2lucygpOiBBYnN0cmFjdFV0eG9Db2luW10ge1xuICByZXR1cm4gbWluVXR4b0NvaW5OYW1lcy5tYXAoZ2V0VXR4b0NvaW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXR4b0NvaW4obmFtZTogc3RyaW5nKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5nZXRDaGFpbigpID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIHdpdGggbmFtZSAke25hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVdHhvQ29pbkZvck5ldHdvcmsobjogdXR4b2xpYi5OZXR3b3JrKTogQWJzdHJhY3RVdHhvQ29pbiB7XG4gIGZvciAoY29uc3QgYyBvZiB1dHhvQ29pbnMpIHtcbiAgICBpZiAoYy5uZXR3b3JrID09PSBuKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIGZvciBuZXR3b3JrICR7dXR4b2xpYi5nZXROZXR3b3JrTmFtZShuKX1gKTtcbn1cblxuZXhwb3J0IHR5cGUgVHhGb3JtYXQgPSAnbGVnYWN5JyB8ICdwc2J0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcmlwdFR5cGVzKGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHR4Rm9ybWF0OiBUeEZvcm1hdCk6IHV0eG9saWIudGVzdHV0aWwuSW5wdXRTY3JpcHRUeXBlW10ge1xuICByZXR1cm4gKFsncDJzaFAycGsnLCAncDJzaCcsICdwMnNoUDJ3c2gnLCAncDJ3c2gnLCAncDJ0cicsICdwMnRyTXVzaWcyJywgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXSBhcyBjb25zdCkuZmlsdGVyKFxuICAgICh0KSA9PiB7XG4gICAgICBpZiAodCA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgICByZXR1cm4gZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3Nlcyhjb2luLm5hbWUpLmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICAgIGlmICh0ID09PSAncDJ0cicgfHwgdCA9PT0gJ3AydHJNdXNpZzInIHx8IHQgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHQgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgICAgICByZXR1cm4gY29pbi5zdXBwb3J0c0FkZHJlc3NUeXBlKCdwMnRyTXVzaWcyJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29pbi5zdXBwb3J0c0FkZHJlc3NUeXBlKHQpO1xuICAgIH1cbiAgKTtcbn1cbiJdfQ==
@@ -66,8 +66,8 @@ describe('manage unspents', function () {
66
66
  const nocks = [];
67
67
  nocks.push(nock(bgUrl).post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/consolidateUnspents`).reply(200, txHexes));
68
68
  nocks.push(...keysObj.map((k, i) => nock(bgUrl).get(`/api/v2/${wallet.coin()}/key/${wallet.keyIds()[i]}`).reply(200, k)));
69
- nocks.push(...psbts.map((psbt) => nock(bgUrl)
70
- .post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`, _.matches({ txHex: psbt.signAllInputsHD(rootWalletKey.user).toHex() }))
69
+ nocks.push(...psbts.map(() => nock(bgUrl)
70
+ .post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`, _.matches({ type: 'consolidate', bulk: true }))
71
71
  .reply(200)));
72
72
  await wallet.consolidateUnspents({ bulk: true, walletPassphrase });
73
73
  nocks.forEach((n) => {
@@ -83,7 +83,7 @@ describe('manage unspents', function () {
83
83
  .reply(200, { txHex: psbt.toHex() }));
84
84
  nocks.push(...keysObj.map((k, i) => nock(bgUrl).get(`/api/v2/${wallet.coin()}/key/${wallet.keyIds()[i]}`).reply(200, k)));
85
85
  nocks.push(nock(bgUrl)
86
- .post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`, _.matches({ txHex: psbt.signAllInputsHD(rootWalletKey.user).toHex() }))
86
+ .post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`, _.matches({ type: 'consolidate' }))
87
87
  .reply(200));
88
88
  await wallet.consolidateUnspents({ walletPassphrase });
89
89
  nocks.forEach((n) => {
@@ -245,4 +245,4 @@ describe('allowPartialSweep verification', function () {
245
245
  response.isDone().should.be.true();
246
246
  });
247
247
  });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUEyQztBQUMzQyxrQkFBZ0I7QUFDaEIsNkJBQThCO0FBQzlCLDBDQUE0QjtBQUM1Qiw4Q0FBd0U7QUFFeEUsaUNBQTRGO0FBRTVGLE1BQU0sS0FBSyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLG1CQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDN0QsTUFBTSxLQUFLLEdBQUcsbUJBQVksQ0FBQztBQUUzQixRQUFRLENBQUMsaUJBQWlCLEVBQUU7SUFDMUIsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxnQkFBZ0IsQ0FBQztJQUNyQixJQUFJLFFBQVEsQ0FBQztJQUNiLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxPQUFPLENBQUM7SUFFWixNQUFNLENBQUMsS0FBSztRQUNWLGFBQWEsR0FBRyxJQUFBLDJCQUFvQixHQUFFLENBQUM7UUFDdkMsZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUM7UUFDNUMsT0FBTyxHQUFHLElBQUEsd0JBQWlCLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDN0QsUUFBUSxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBRztZQUNqQixFQUFFLEVBQUUsMEJBQTBCO1lBQzlCLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDL0IsQ0FBQztRQUNGLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLO1FBQ3JELE1BQU0sS0FBSyxHQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ2pFLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUM1QixDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUNyQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUNwQyxRQUFRLENBQUMsT0FBTyxFQUNoQixhQUFhLEVBQ2IsVUFBVSxDQUNYLENBQ0YsQ0FBQztRQUNGLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sS0FBSyxHQUFpQixFQUFFLENBQUM7UUFDL0IsS0FBSyxDQUFDLElBQUksQ0FDUixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUMzRyxDQUFDO1FBRUYsS0FBSyxDQUFDLElBQUksQ0FDUixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUM5RyxDQUFDO1FBRUYsS0FBSyxDQUFDLElBQUksQ0FDUixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ1IsSUFBSSxDQUNILFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUN4RCxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDdkU7YUFDQSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQ2QsQ0FDRixDQUFDO1FBRUYsTUFBTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUVuRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbEIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUN6QyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFDOUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQ2pELFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLGFBQWEsRUFDYixVQUFVLENBQ1gsQ0FBQztRQUNGLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVsRCxNQUFNLEtBQUssR0FBaUIsRUFBRSxDQUFDO1FBQy9CLEtBQUssQ0FBQyxJQUFJLENBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUNSLElBQUksQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLHNCQUFzQixDQUFDO2FBQzFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDdkMsQ0FBQztRQUVGLEtBQUssQ0FBQyxJQUFJLENBQ1IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDOUcsQ0FBQztRQUVGLEtBQUssQ0FBQyxJQUFJLENBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUNSLElBQUksQ0FDSCxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFDeEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQ3ZFO2FBQ0EsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUNkLENBQUM7UUFFRixNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUV2RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbEIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsUUFBUSxDQUFDLGVBQWUsRUFBRTtJQUN4QixNQUFNLE9BQU8sR0FBRywwQkFBMEIsQ0FBQztJQUMzQyxNQUFNLFVBQVUsR0FBRztRQUNqQjtZQUNFLE9BQU87WUFDUCxNQUFNLEVBQUUsS0FBSztTQUNkO0tBQ0YsQ0FBQztJQUNGLElBQUksUUFBUSxDQUFDO0lBQ2IsSUFBSSxNQUFNLENBQUM7SUFFWCxNQUFNLENBQUMsS0FBSztRQUNWLFFBQVEsR0FBRyxJQUFBLGtCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsTUFBTSxVQUFVLEdBQUc7WUFDakIsRUFBRSxFQUFFLDBCQUEwQjtZQUM5QixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxDQUFDLDBCQUEwQixDQUFDO1NBQ25DLENBQUM7UUFDRixNQUFNLEdBQUcsSUFBSSxpQkFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSztRQUNyRSxNQUFNLElBQUksR0FBRyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQztRQUN2RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ3pCLElBQUksQ0FDSCxJQUFJLEVBQ0osQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNSLFVBQVU7U0FDWCxDQUFDLENBQ0gsQ0FBQyx3RkFBd0Y7YUFDekYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsMEdBQTBHO1lBQzFHLDhFQUE4RTtRQUNoRixDQUFDO1FBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyx5QkFBeUIsRUFBRTtJQUNsQyxNQUFNLE9BQU8sR0FBRywwQkFBMEIsQ0FBQztJQUMzQyxNQUFNLFVBQVUsR0FBRztRQUNqQjtZQUNFLE9BQU87WUFDUCxNQUFNLEVBQUUsQ0FBQztTQUNWO0tBQ0YsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLFFBQVEsQ0FBQztJQUNiLElBQUksTUFBTSxDQUFDO0lBRVgsTUFBTSxDQUFDLEtBQUs7UUFDVixRQUFRLEdBQUcsSUFBQSxrQkFBVyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEVBQUUsRUFBRSwwQkFBMEI7WUFDOUIsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztTQUNuQyxDQUFDO1FBQ0YsTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEtBQUs7UUFDckUsTUFBTSxJQUFJLEdBQUcsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUM7UUFDdkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUN6QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLHdGQUF3RjthQUMxSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFZCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsMEdBQTBHO1lBQzFHLDhFQUE4RTtRQUNoRixDQUFDO1FBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSztRQUN0RSxNQUFNLElBQUksR0FBRyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLHNCQUFzQixDQUFDO1FBQ2xGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLHdGQUF3RjthQUM5SCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFZCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpGLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCwwR0FBMEc7WUFDMUcseUZBQXlGO1FBQzNGLENBQUM7UUFFRCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxtRUFBbUUsRUFBRSxLQUFLO1FBQzNFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkcsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakYsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV0RixNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLGdDQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRW5GLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSztRQUNyRSxNQUFNLElBQUksR0FBRyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQztRQUMxRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsd0ZBQXdGO2FBQ3ZJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVkLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsNEZBQTRGO1lBQzVGLGlGQUFpRjtRQUNuRixDQUFDO1FBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztRQUN2RSxNQUFNLElBQUksR0FBRyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDO1FBQzdFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLHdGQUF3RjthQUM5SCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFZCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLHFHQUFxRztZQUNyRyxvRkFBb0Y7UUFDdEYsQ0FBQztRQUVELFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsZ0NBQWdDLEVBQUU7SUFDekMsTUFBTSxPQUFPLEdBQUcsMEJBQTBCLENBQUM7SUFDM0MsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFDL0IsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLE1BQU0sQ0FBQztJQUVYLE1BQU0sQ0FBQyxLQUFLO1FBQ1YsUUFBUSxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBRztZQUNqQixFQUFFLEVBQUUsMEJBQTBCO1lBQzlCLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLENBQUMsMEJBQTBCLENBQUM7U0FDbkMsQ0FBQztRQUNGLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxLQUFLO1FBQzVFLE1BQU0sSUFBSSxHQUFHLFdBQVcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDO1FBQzFFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLHdGQUF3RjthQUM5SSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFZCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsNEZBQTRGO1lBQzVGLHdGQUF3RjtRQUMxRixDQUFDO1FBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9MaWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgV2FsbGV0LCBNYW5hZ2VVbnNwZW50c09wdGlvbnMsIGNvbW1vbiB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IGRlZmF1bHRCaXRHbywgZ2V0RGVmYXVsdFdhbGxldEtleXMsIHRvS2V5Y2hhaW5PYmplY3RzLCBnZXRVdHhvQ29pbiB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcbmNvbnN0IGJpdGdvID0gZGVmYXVsdEJpdEdvO1xuXG5kZXNjcmliZSgnbWFuYWdlIHVuc3BlbnRzJywgZnVuY3Rpb24gKCkge1xuICBsZXQgcm9vdFdhbGxldEtleTtcbiAgbGV0IHdhbGxldFBhc3NwaHJhc2U7XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IHdhbGxldDtcbiAgbGV0IGtleXNPYmo7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICByb290V2FsbGV0S2V5ID0gZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcbiAgICB3YWxsZXRQYXNzcGhyYXNlID0gJ2ZpeHRoZW1vbmV5Zml4dGhld29ybGQnO1xuICAgIGtleXNPYmogPSB0b0tleWNoYWluT2JqZWN0cyhyb290V2FsbGV0S2V5LCB3YWxsZXRQYXNzcGhyYXNlKTtcbiAgICBiYXNlY29pbiA9IGdldFV0eG9Db2luKCd0YnRjJyk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgIGNvaW46ICd0YnRjJyxcbiAgICAgIGtleXM6IGtleXNPYmoubWFwKChrKSA9PiBrLmlkKSxcbiAgICB9O1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIGZvciBidWxrIGNvbnNvbGlkYXRpbmcgdW5zcGVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcHNidHMgPSAoWydwMndzaCcsICdwMnNoUDJ3c2gnXSBhcyBjb25zdCkubWFwKChzY3JpcHRUeXBlKSA9PlxuICAgICAgdXR4b0xpYi50ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KFxuICAgICAgICBbeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDEwMDApIH1dLFxuICAgICAgICBbeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDkwMCkgfV0sXG4gICAgICAgIGJhc2Vjb2luLm5ldHdvcmssXG4gICAgICAgIHJvb3RXYWxsZXRLZXksXG4gICAgICAgICd1bnNpZ25lZCdcbiAgICAgIClcbiAgICApO1xuICAgIHBzYnRzLmZvckVhY2goKHBzYnQpID0+IHV0eG9MaWIuYml0Z28uYWRkWHB1YnNUb1BzYnQocHNidCwgcm9vdFdhbGxldEtleSkpO1xuICAgIGNvbnN0IHR4SGV4ZXMgPSBwc2J0cy5tYXAoKHBzYnQpID0+ICh7IHR4SGV4OiBwc2J0LnRvSGV4KCkgfSkpO1xuXG4gICAgY29uc3Qgbm9ja3M6IG5vY2suU2NvcGVbXSA9IFtdO1xuICAgIG5vY2tzLnB1c2goXG4gICAgICBub2NrKGJnVXJsKS5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2NvbnNvbGlkYXRlVW5zcGVudHNgKS5yZXBseSgyMDAsIHR4SGV4ZXMpXG4gICAgKTtcblxuICAgIG5vY2tzLnB1c2goXG4gICAgICAuLi5rZXlzT2JqLm1hcCgoaywgaSkgPT4gbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0va2V5LyR7d2FsbGV0LmtleUlkcygpW2ldfWApLnJlcGx5KDIwMCwgaykpXG4gICAgKTtcblxuICAgIG5vY2tzLnB1c2goXG4gICAgICAuLi5wc2J0cy5tYXAoKHBzYnQpID0+XG4gICAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBvc3QoXG4gICAgICAgICAgICBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zZW5kYCxcbiAgICAgICAgICAgIF8ubWF0Y2hlcyh7IHR4SGV4OiBwc2J0LnNpZ25BbGxJbnB1dHNIRChyb290V2FsbGV0S2V5LnVzZXIpLnRvSGV4KCkgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnJlcGx5KDIwMClcbiAgICAgIClcbiAgICApO1xuXG4gICAgYXdhaXQgd2FsbGV0LmNvbnNvbGlkYXRlVW5zcGVudHMoeyBidWxrOiB0cnVlLCB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuXG4gICAgbm9ja3MuZm9yRWFjaCgobikgPT4ge1xuICAgICAgbi5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgZm9yIHNpbmdsZSBjb25zb2xpZGF0aW5nIHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBzYnQgPSB1dHhvTGliLnRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoXG4gICAgICBbeyBzY3JpcHRUeXBlOiAncDJ3c2gnLCB2YWx1ZTogQmlnSW50KDEwMDApIH1dLFxuICAgICAgW3sgc2NyaXB0VHlwZTogJ3Ayc2hQMndzaCcsIHZhbHVlOiBCaWdJbnQoOTAwKSB9XSxcbiAgICAgIGJhc2Vjb2luLm5ldHdvcmssXG4gICAgICByb290V2FsbGV0S2V5LFxuICAgICAgJ3Vuc2lnbmVkJ1xuICAgICk7XG4gICAgdXR4b0xpYi5iaXRnby5hZGRYcHVic1RvUHNidChwc2J0LCByb290V2FsbGV0S2V5KTtcblxuICAgIGNvbnN0IG5vY2tzOiBub2NrLlNjb3BlW10gPSBbXTtcbiAgICBub2Nrcy5wdXNoKFxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vY29uc29saWRhdGVVbnNwZW50c2ApXG4gICAgICAgIC5yZXBseSgyMDAsIHsgdHhIZXg6IHBzYnQudG9IZXgoKSB9KVxuICAgICk7XG5cbiAgICBub2Nrcy5wdXNoKFxuICAgICAgLi4ua2V5c09iai5tYXAoKGssIGkpID0+IG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L2tleS8ke3dhbGxldC5rZXlJZHMoKVtpXX1gKS5yZXBseSgyMDAsIGspKVxuICAgICk7XG5cbiAgICBub2Nrcy5wdXNoKFxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoXG4gICAgICAgICAgYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvc2VuZGAsXG4gICAgICAgICAgXy5tYXRjaGVzKHsgdHhIZXg6IHBzYnQuc2lnbkFsbElucHV0c0hEKHJvb3RXYWxsZXRLZXkudXNlcikudG9IZXgoKSB9KVxuICAgICAgICApXG4gICAgICAgIC5yZXBseSgyMDApXG4gICAgKTtcblxuICAgIGF3YWl0IHdhbGxldC5jb25zb2xpZGF0ZVVuc3BlbnRzKHsgd2FsbGV0UGFzc3BocmFzZSB9KTtcblxuICAgIG5vY2tzLmZvckVhY2goKG4pID0+IHtcbiAgICAgIG4uaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbmRlc2NyaWJlKCdtYXggcmVjaXBpZW50JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBhZGRyZXNzID0gJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYSc7XG4gIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGFtb3VudDogJ21heCcsXG4gICAgfSxcbiAgXTtcbiAgbGV0IGJhc2Vjb2luO1xuICBsZXQgd2FsbGV0O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4gPSBnZXRVdHhvQ29pbigndGJ0YycpO1xuICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYScsXG4gICAgICBjb2luOiAndGJ0YycsXG4gICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgIH07XG4gICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgbWF4RmVlUmF0ZSBwYXJhbWV0ZXIgd2hlbiBidWlsZGluZyB0cmFuc2FjdGlvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L2J1aWxkYDtcbiAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAucG9zdChcbiAgICAgICAgcGF0aCxcbiAgICAgICAgXy5tYXRjaGVzKHtcbiAgICAgICAgICByZWNpcGllbnRzLFxuICAgICAgICB9KVxuICAgICAgKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAucmVwbHkoMjAwKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWxsZXQucHJlYnVpbGRUcmFuc2FjdGlvbih7IHJlY2lwaWVudHMgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdGhlIHByZWJ1aWxkVHJhbnNhY3Rpb24gbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC90eC9idWlsZCBhbmQgd2hldGhlciBtYXhGZWVSYXRlIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgfVxuXG4gICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ21heEZlZVJhdGUgdmVyaWZpY2F0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBhZGRyZXNzID0gJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYSc7XG4gIGNvbnN0IHJlY2lwaWVudHMgPSBbXG4gICAge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGFtb3VudDogMCxcbiAgICB9LFxuICBdO1xuICBjb25zdCBtYXhGZWVSYXRlID0gMTAwMDA7XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IHdhbGxldDtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgY29pbjogJ3RidGMnLFxuICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICB9O1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIG1heEZlZVJhdGUgcGFyYW1ldGVyIHdoZW4gYnVpbGRpbmcgdHJhbnNhY3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgcmVjaXBpZW50cywgbWF4RmVlUmF0ZSB9KSkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzLCBtYXhGZWVSYXRlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRoZSBwcmVidWlsZFRyYW5zYWN0aW9uIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvdHgvYnVpbGQgYW5kIHdoZXRoZXIgbWF4RmVlUmF0ZSBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgIH1cblxuICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyBtYXhGZWVSYXRlIHBhcmFtZXRlciB3aGVuIGNvbnNvbGlkYXRpbmcgdW5zcGVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2NvbnNvbGlkYXRlVW5zcGVudHNgO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IG1heEZlZVJhdGUgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0va2V5LyR7d2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FsbGV0LmNvbnNvbGlkYXRlVW5zcGVudHMoeyByZWNpcGllbnRzLCBtYXhGZWVSYXRlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRoZSBjb25zb2xpZGF0ZVVuc3BlbnRzIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvY29uc29saWRhdGVVbnNwZW50cyBhbmQgd2hldGhlciBtYXhGZWVSYXRlIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgfVxuXG4gICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBvbmx5IGJ1aWxkIHR4IChub3Qgc2lnbi9zZW5kKSB3aGlsZSBjb25zb2xpZGF0aW5nIHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRvQmVVc2VkTm9jayA9IG5vY2soYmdVcmwpO1xuICAgIHRvQmVVc2VkTm9jay5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2NvbnNvbGlkYXRlVW5zcGVudHNgKS5yZXBseSgyMDApO1xuXG4gICAgY29uc3QgdW51c2VkTm9ja3MgPSBub2NrKGJnVXJsKTtcbiAgICB1bnVzZWROb2Nrcy5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS9rZXkvJHt3YWxsZXQua2V5SWRzKClbMF19YCkucmVwbHkoMjAwKTtcbiAgICB1bnVzZWROb2Nrcy5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L3NlbmRgKS5yZXBseSgyMDApO1xuXG4gICAgYXdhaXQgd2FsbGV0LmNvbnNvbGlkYXRlVW5zcGVudHMoeyByZWNpcGllbnRzIH0sIE1hbmFnZVVuc3BlbnRzT3B0aW9ucy5CVUlMRF9PTkxZKTtcblxuICAgIHRvQmVVc2VkTm9jay5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIHVudXNlZE5vY2tzLnBlbmRpbmdNb2NrcygpLmxlbmd0aC5zaG91bGQuZXFsKDIpO1xuICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIG1heEZlZVJhdGUgcGFyYW1ldGVyIHdoZW4gY2FsbGluZyBzd2VlcCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9zd2VlcFdhbGxldGA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgYWRkcmVzcywgbWF4RmVlUmF0ZSB9KSkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FsbGV0LnN3ZWVwKHsgYWRkcmVzcywgbWF4RmVlUmF0ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0aGUgc3dlZXAgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC9zd2VlcFdhbGxldCBhbmQgd2hldGhlciBtYXhGZWVSYXRlIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgfVxuXG4gICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIG1heEZlZVJhdGUgcGFyYW1ldGVyIHdoZW4gY2FsbGluZyBmYW5vdXQgdW5zcGVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGF0aCA9IGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2Zhbm91dFVuc3BlbnRzYDtcbiAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAucG9zdChwYXRoLCBfLm1hdGNoZXMoeyBtYXhGZWVSYXRlIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAucmVwbHkoMjAwKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWxsZXQuZmFub3V0VW5zcGVudHMoeyBhZGRyZXNzLCBtYXhGZWVSYXRlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRoZSBmYW5vdXRVbnNwZW50cyBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL2Zhbm91dFVuc3BlbnRzIGFuZCB3aGV0aGVyIG1heEZlZVJhdGUgaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICB9XG5cbiAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnYWxsb3dQYXJ0aWFsU3dlZXAgdmVyaWZpY2F0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBhZGRyZXNzID0gJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYSc7XG4gIGNvbnN0IGFsbG93UGFydGlhbFN3ZWVwID0gdHJ1ZTtcbiAgbGV0IGJhc2Vjb2luO1xuICBsZXQgd2FsbGV0O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4gPSBnZXRVdHhvQ29pbigndGJ0YycpO1xuICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYScsXG4gICAgICBjb2luOiAndGJ0YycsXG4gICAgICBrZXlzOiBbJzViMzQyNGY5MWJmMzQ5OTMwZTM0MDE3NSddLFxuICAgIH07XG4gICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgYWxsb3dQYXJ0aWFsU3dlZXAgcGFyYW1ldGVyIHdoZW4gY2FsbGluZyBzd2VlcCB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9zd2VlcFdhbGxldGA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgYWRkcmVzcywgYWxsb3dQYXJ0aWFsU3dlZXAgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhbGxldC5zd2VlcCh7IGFkZHJlc3MsIGFsbG93UGFydGlhbFN3ZWVwIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRoZSBzd2VlcCBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL3N3ZWVwV2FsbGV0IGFuZCB3aGV0aGVyIGFsbG93UGFydGlhbFN3ZWVwIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgfVxuXG4gICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG59KTtcbiJdfQ==
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUEyQztBQUMzQyxrQkFBZ0I7QUFDaEIsNkJBQThCO0FBQzlCLDBDQUE0QjtBQUM1Qiw4Q0FBd0U7QUFFeEUsaUNBQTRGO0FBRTVGLE1BQU0sS0FBSyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLG1CQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDN0QsTUFBTSxLQUFLLEdBQUcsbUJBQVksQ0FBQztBQUUzQixRQUFRLENBQUMsaUJBQWlCLEVBQUU7SUFDMUIsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxnQkFBZ0IsQ0FBQztJQUNyQixJQUFJLFFBQVEsQ0FBQztJQUNiLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxPQUFPLENBQUM7SUFFWixNQUFNLENBQUMsS0FBSztRQUNWLGFBQWEsR0FBRyxJQUFBLDJCQUFvQixHQUFFLENBQUM7UUFDdkMsZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUM7UUFDNUMsT0FBTyxHQUFHLElBQUEsd0JBQWlCLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDN0QsUUFBUSxHQUFHLElBQUEsa0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBRztZQUNqQixFQUFFLEVBQUUsMEJBQTBCO1lBQzlCLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDL0IsQ0FBQztRQUNGLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNuRCxD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QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b0xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBXYWxsZXQsIE1hbmFnZVVuc3BlbnRzT3B0aW9ucywgY29tbW9uIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgZGVmYXVsdEJpdEdvLCBnZXREZWZhdWx0V2FsbGV0S2V5cywgdG9LZXljaGFpbk9iamVjdHMsIGdldFV0eG9Db2luIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2RlZmF1bHRCaXRHby5nZXRFbnYoKV0udXJpO1xuY29uc3QgYml0Z28gPSBkZWZhdWx0Qml0R287XG5cbmRlc2NyaWJlKCdtYW5hZ2UgdW5zcGVudHMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCByb290V2FsbGV0S2V5O1xuICBsZXQgd2FsbGV0UGFzc3BocmFzZTtcbiAgbGV0IGJhc2Vjb2luO1xuICBsZXQgd2FsbGV0O1xuICBsZXQga2V5c09iajtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHJvb3RXYWxsZXRLZXkgPSBnZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICAgIHdhbGxldFBhc3NwaHJhc2UgPSAnZml4dGhlbW9uZXlmaXh0aGV3b3JsZCc7XG4gICAga2V5c09iaiA9IHRvS2V5Y2hhaW5PYmplY3RzKHJvb3RXYWxsZXRLZXksIHdhbGxldFBhc3NwaHJhc2UpO1xuICAgIGJhc2Vjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgY29pbjogJ3RidGMnLFxuICAgICAga2V5czoga2V5c09iai5tYXAoKGspID0+IGsuaWQpLFxuICAgIH07XG4gICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgZm9yIGJ1bGsgY29uc29saWRhdGluZyB1bnNwZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwc2J0cyA9IChbJ3Ayd3NoJywgJ3Ayc2hQMndzaCddIGFzIGNvbnN0KS5tYXAoKHNjcmlwdFR5cGUpID0+XG4gICAgICB1dHhvTGliLnRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoXG4gICAgICAgIFt7IHNjcmlwdFR5cGUsIHZhbHVlOiBCaWdJbnQoMTAwMCkgfV0sXG4gICAgICAgIFt7IHNjcmlwdFR5cGUsIHZhbHVlOiBCaWdJbnQoOTAwKSB9XSxcbiAgICAgICAgYmFzZWNvaW4ubmV0d29yayxcbiAgICAgICAgcm9vdFdhbGxldEtleSxcbiAgICAgICAgJ3Vuc2lnbmVkJ1xuICAgICAgKVxuICAgICk7XG4gICAgcHNidHMuZm9yRWFjaCgocHNidCkgPT4gdXR4b0xpYi5iaXRnby5hZGRYcHVic1RvUHNidChwc2J0LCByb290V2FsbGV0S2V5KSk7XG4gICAgY29uc3QgdHhIZXhlcyA9IHBzYnRzLm1hcCgocHNidCkgPT4gKHsgdHhIZXg6IHBzYnQudG9IZXgoKSB9KSk7XG5cbiAgICBjb25zdCBub2Nrczogbm9jay5TY29wZVtdID0gW107XG4gICAgbm9ja3MucHVzaChcbiAgICAgIG5vY2soYmdVcmwpLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vY29uc29saWRhdGVVbnNwZW50c2ApLnJlcGx5KDIwMCwgdHhIZXhlcylcbiAgICApO1xuXG4gICAgbm9ja3MucHVzaChcbiAgICAgIC4uLmtleXNPYmoubWFwKChrLCBpKSA9PiBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS9rZXkvJHt3YWxsZXQua2V5SWRzKClbaV19YCkucmVwbHkoMjAwLCBrKSlcbiAgICApO1xuXG4gICAgbm9ja3MucHVzaChcbiAgICAgIC4uLnBzYnRzLm1hcCgoKSA9PlxuICAgICAgICBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KFxuICAgICAgICAgICAgYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvc2VuZGAsXG4gICAgICAgICAgICBfLm1hdGNoZXMoeyB0eXBlOiAnY29uc29saWRhdGUnLCBidWxrOiB0cnVlIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZXBseSgyMDApXG4gICAgICApXG4gICAgKTtcblxuICAgIGF3YWl0IHdhbGxldC5jb25zb2xpZGF0ZVVuc3BlbnRzKHsgYnVsazogdHJ1ZSwgd2FsbGV0UGFzc3BocmFzZSB9KTtcblxuICAgIG5vY2tzLmZvckVhY2goKG4pID0+IHtcbiAgICAgIG4uaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIGZvciBzaW5nbGUgY29uc29saWRhdGluZyB1bnNwZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwc2J0ID0gdXR4b0xpYi50ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KFxuICAgICAgW3sgc2NyaXB0VHlwZTogJ3Ayd3NoJywgdmFsdWU6IEJpZ0ludCgxMDAwKSB9XSxcbiAgICAgIFt7IHNjcmlwdFR5cGU6ICdwMnNoUDJ3c2gnLCB2YWx1ZTogQmlnSW50KDkwMCkgfV0sXG4gICAgICBiYXNlY29pbi5uZXR3b3JrLFxuICAgICAgcm9vdFdhbGxldEtleSxcbiAgICAgICd1bnNpZ25lZCdcbiAgICApO1xuICAgIHV0eG9MaWIuYml0Z28uYWRkWHB1YnNUb1BzYnQocHNidCwgcm9vdFdhbGxldEtleSk7XG5cbiAgICBjb25zdCBub2Nrczogbm9jay5TY29wZVtdID0gW107XG4gICAgbm9ja3MucHVzaChcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2NvbnNvbGlkYXRlVW5zcGVudHNgKVxuICAgICAgICAucmVwbHkoMjAwLCB7IHR4SGV4OiBwc2J0LnRvSGV4KCkgfSlcbiAgICApO1xuXG4gICAgbm9ja3MucHVzaChcbiAgICAgIC4uLmtleXNPYmoubWFwKChrLCBpKSA9PiBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS9rZXkvJHt3YWxsZXQua2V5SWRzKClbaV19YCkucmVwbHkoMjAwLCBrKSlcbiAgICApO1xuXG4gICAgbm9ja3MucHVzaChcbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L3NlbmRgLCBfLm1hdGNoZXMoeyB0eXBlOiAnY29uc29saWRhdGUnIH0pKVxuICAgICAgICAucmVwbHkoMjAwKVxuICAgICk7XG5cbiAgICBhd2FpdCB3YWxsZXQuY29uc29saWRhdGVVbnNwZW50cyh7IHdhbGxldFBhc3NwaHJhc2UgfSk7XG5cbiAgICBub2Nrcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICBuLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5kZXNjcmliZSgnbWF4IHJlY2lwaWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYWRkcmVzcyA9ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnO1xuICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgIHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBhbW91bnQ6ICdtYXgnLFxuICAgIH0sXG4gIF07XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IHdhbGxldDtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgY29pbjogJ3RidGMnLFxuICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICB9O1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIG1heEZlZVJhdGUgcGFyYW1ldGVyIHdoZW4gYnVpbGRpbmcgdHJhbnNhY3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9idWlsZGA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QoXG4gICAgICAgIHBhdGgsXG4gICAgICAgIF8ubWF0Y2hlcyh7XG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgfSlcbiAgICAgICkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FsbGV0LnByZWJ1aWxkVHJhbnNhY3Rpb24oeyByZWNpcGllbnRzIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRoZSBwcmVidWlsZFRyYW5zYWN0aW9uIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvdHgvYnVpbGQgYW5kIHdoZXRoZXIgbWF4RmVlUmF0ZSBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgIH1cblxuICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdtYXhGZWVSYXRlIHZlcmlmaWNhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYWRkcmVzcyA9ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnO1xuICBjb25zdCByZWNpcGllbnRzID0gW1xuICAgIHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBhbW91bnQ6IDAsXG4gICAgfSxcbiAgXTtcbiAgY29uc3QgbWF4RmVlUmF0ZSA9IDEwMDAwO1xuICBsZXQgYmFzZWNvaW47XG4gIGxldCB3YWxsZXQ7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlY29pbiA9IGdldFV0eG9Db2luKCd0YnRjJyk7XG4gICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgIGNvaW46ICd0YnRjJyxcbiAgICAgIGtleXM6IFsnNWIzNDI0ZjkxYmYzNDk5MzBlMzQwMTc1J10sXG4gICAgfTtcbiAgICB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgd2FsbGV0RGF0YSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyBtYXhGZWVSYXRlIHBhcmFtZXRlciB3aGVuIGJ1aWxkaW5nIHRyYW5zYWN0aW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvYnVpbGRgO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IHJlY2lwaWVudHMsIG1heEZlZVJhdGUgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhbGxldC5wcmVidWlsZFRyYW5zYWN0aW9uKHsgcmVjaXBpZW50cywgbWF4RmVlUmF0ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0aGUgcHJlYnVpbGRUcmFuc2FjdGlvbiBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL3R4L2J1aWxkIGFuZCB3aGV0aGVyIG1heEZlZVJhdGUgaXMgYW4gYWxsb3dlZCBwYXJhbWV0ZXJcbiAgICB9XG5cbiAgICByZXNwb25zZS5pc0RvbmUoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3MgbWF4RmVlUmF0ZSBwYXJhbWV0ZXIgd2hlbiBjb25zb2xpZGF0aW5nIHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9jb25zb2xpZGF0ZVVuc3BlbnRzYDtcbiAgICBjb25zdCByZXNwb25zZSA9IG5vY2soYmdVcmwpXG4gICAgICAucG9zdChwYXRoLCBfLm1hdGNoZXMoeyBtYXhGZWVSYXRlIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAucmVwbHkoMjAwKTtcblxuICAgIG5vY2soYmdVcmwpLmdldChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L2tleS8ke3dhbGxldC5rZXlJZHMoKVswXX1gKS5yZXBseSgyMDApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhbGxldC5jb25zb2xpZGF0ZVVuc3BlbnRzKHsgcmVjaXBpZW50cywgbWF4RmVlUmF0ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0aGUgY29uc29saWRhdGVVbnNwZW50cyBtZXRob2Qgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24gZm9yIG5vdCBoYXZpbmcgYWxsIG9mIHRoZSBjb3JyZWN0IG5vY2tzXG4gICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgL2NvbnNvbGlkYXRlVW5zcGVudHMgYW5kIHdoZXRoZXIgbWF4RmVlUmF0ZSBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgIH1cblxuICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgb25seSBidWlsZCB0eCAobm90IHNpZ24vc2VuZCkgd2hpbGUgY29uc29saWRhdGluZyB1bnNwZW50cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0b0JlVXNlZE5vY2sgPSBub2NrKGJnVXJsKTtcbiAgICB0b0JlVXNlZE5vY2sucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9jb25zb2xpZGF0ZVVuc3BlbnRzYCkucmVwbHkoMjAwKTtcblxuICAgIGNvbnN0IHVudXNlZE5vY2tzID0gbm9jayhiZ1VybCk7XG4gICAgdW51c2VkTm9ja3MuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0va2V5LyR7d2FsbGV0LmtleUlkcygpWzBdfWApLnJlcGx5KDIwMCk7XG4gICAgdW51c2VkTm9ja3MucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zZW5kYCkucmVwbHkoMjAwKTtcblxuICAgIGF3YWl0IHdhbGxldC5jb25zb2xpZGF0ZVVuc3BlbnRzKHsgcmVjaXBpZW50cyB9LCBNYW5hZ2VVbnNwZW50c09wdGlvbnMuQlVJTERfT05MWSk7XG5cbiAgICB0b0JlVXNlZE5vY2suaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB1bnVzZWROb2Nrcy5wZW5kaW5nTW9ja3MoKS5sZW5ndGguc2hvdWxkLmVxbCgyKTtcbiAgICBub2NrLmNsZWFuQWxsKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyBtYXhGZWVSYXRlIHBhcmFtZXRlciB3aGVuIGNhbGxpbmcgc3dlZXAgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vc3dlZXBXYWxsZXRgO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IGFkZHJlc3MsIG1heEZlZVJhdGUgfSkpIC8vIHVzZSBfLm1hdGNoZXMgdG8gZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHJlcXVlc3QgYm9keSBvYmplY3QgaW5zdGVhZCBvZiBzdHJpY3QgbWF0Y2hpbmdcbiAgICAgIC5yZXBseSgyMDApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhbGxldC5zd2VlcCh7IGFkZHJlc3MsIG1heEZlZVJhdGUgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdGhlIHN3ZWVwIG1ldGhvZCB3aWxsIHByb2JhYmx5IHRocm93IGFuIGV4Y2VwdGlvbiBmb3Igbm90IGhhdmluZyBhbGwgb2YgdGhlIGNvcnJlY3Qgbm9ja3NcbiAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCAvc3dlZXBXYWxsZXQgYW5kIHdoZXRoZXIgbWF4RmVlUmF0ZSBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgIH1cblxuICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyBtYXhGZWVSYXRlIHBhcmFtZXRlciB3aGVuIGNhbGxpbmcgZmFub3V0IHVuc3BlbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBhdGggPSBgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9mYW5vdXRVbnNwZW50c2A7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBub2NrKGJnVXJsKVxuICAgICAgLnBvc3QocGF0aCwgXy5tYXRjaGVzKHsgbWF4RmVlUmF0ZSB9KSkgLy8gdXNlIF8ubWF0Y2hlcyB0byBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gcmVxdWVzdCBib2R5IG9iamVjdCBpbnN0ZWFkIG9mIHN0cmljdCBtYXRjaGluZ1xuICAgICAgLnJlcGx5KDIwMCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FsbGV0LmZhbm91dFVuc3BlbnRzKHsgYWRkcmVzcywgbWF4RmVlUmF0ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0aGUgZmFub3V0VW5zcGVudHMgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC9mYW5vdXRVbnNwZW50cyBhbmQgd2hldGhlciBtYXhGZWVSYXRlIGlzIGFuIGFsbG93ZWQgcGFyYW1ldGVyXG4gICAgfVxuXG4gICAgcmVzcG9uc2UuaXNEb25lKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2FsbG93UGFydGlhbFN3ZWVwIHZlcmlmaWNhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYWRkcmVzcyA9ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnO1xuICBjb25zdCBhbGxvd1BhcnRpYWxTd2VlcCA9IHRydWU7XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IHdhbGxldDtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luID0gZ2V0VXR4b0NvaW4oJ3RidGMnKTtcbiAgICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEnLFxuICAgICAgY29pbjogJ3RidGMnLFxuICAgICAga2V5czogWyc1YjM0MjRmOTFiZjM0OTkzMGUzNDAxNzUnXSxcbiAgICB9O1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIGFsbG93UGFydGlhbFN3ZWVwIHBhcmFtZXRlciB3aGVuIGNhbGxpbmcgc3dlZXAgd2FsbGV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXRoID0gYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vc3dlZXBXYWxsZXRgO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gbm9jayhiZ1VybClcbiAgICAgIC5wb3N0KHBhdGgsIF8ubWF0Y2hlcyh7IGFkZHJlc3MsIGFsbG93UGFydGlhbFN3ZWVwIH0pKSAvLyB1c2UgXy5tYXRjaGVzIHRvIGRvIGEgcGFydGlhbCBtYXRjaCBvbiByZXF1ZXN0IGJvZHkgb2JqZWN0IGluc3RlYWQgb2Ygc3RyaWN0IG1hdGNoaW5nXG4gICAgICAucmVwbHkoMjAwKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWxsZXQuc3dlZXAoeyBhZGRyZXNzLCBhbGxvd1BhcnRpYWxTd2VlcCB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0aGUgc3dlZXAgbWV0aG9kIHdpbGwgcHJvYmFibHkgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBub3QgaGF2aW5nIGFsbCBvZiB0aGUgY29ycmVjdCBub2Nrc1xuICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IC9zd2VlcFdhbGxldCBhbmQgd2hldGhlciBhbGxvd1BhcnRpYWxTd2VlcCBpcyBhbiBhbGxvd2VkIHBhcmFtZXRlclxuICAgIH1cblxuICAgIHJlc3BvbnNlLmlzRG9uZSgpLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xufSk7XG4iXX0=