@bitgo-beta/sdk-core 8.2.1-beta.192 → 8.2.1-beta.1921

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 (664) hide show
  1. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts +0 -1
  2. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts.map +1 -1
  3. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts +3 -3
  4. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts.map +1 -1
  5. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.js +4 -3
  6. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts +1 -0
  7. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts.map +1 -1
  8. package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +41 -29
  9. package/dist/src/account-lib/baseCoin/enum.d.ts +54 -5
  10. package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
  11. package/dist/src/account-lib/baseCoin/enum.js +101 -10
  12. package/dist/src/account-lib/baseCoin/errors.d.ts +3 -0
  13. package/dist/src/account-lib/baseCoin/errors.d.ts.map +1 -1
  14. package/dist/src/account-lib/baseCoin/errors.js +8 -2
  15. package/dist/src/account-lib/baseCoin/iface.d.ts +19 -35
  16. package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
  17. package/dist/src/account-lib/baseCoin/iface.js +26 -18
  18. package/dist/src/account-lib/baseCoin/index.d.ts +1 -1
  19. package/dist/src/account-lib/baseCoin/index.d.ts.map +1 -1
  20. package/dist/src/account-lib/baseCoin/index.js +8 -5
  21. package/dist/src/account-lib/baseCoin/messages/baseMessage.d.ts +88 -0
  22. package/dist/src/account-lib/baseCoin/messages/baseMessage.d.ts.map +1 -0
  23. package/dist/src/account-lib/baseCoin/messages/baseMessage.js +154 -0
  24. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.d.ts +67 -0
  25. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.d.ts.map +1 -0
  26. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.js +144 -0
  27. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts +33 -0
  28. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts.map +1 -0
  29. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.js +45 -0
  30. package/dist/src/account-lib/baseCoin/messages/iface.d.ts +164 -0
  31. package/dist/src/account-lib/baseCoin/messages/iface.d.ts.map +1 -0
  32. package/dist/src/account-lib/baseCoin/messages/iface.js +3 -0
  33. package/dist/src/account-lib/baseCoin/messages/index.d.ts +6 -0
  34. package/dist/src/account-lib/baseCoin/messages/index.d.ts.map +1 -0
  35. package/dist/src/account-lib/baseCoin/messages/index.js +22 -0
  36. package/dist/src/account-lib/baseCoin/messages/simple/index.d.ts +3 -0
  37. package/dist/src/account-lib/baseCoin/messages/simple/index.d.ts.map +1 -0
  38. package/dist/src/account-lib/baseCoin/messages/simple/index.js +19 -0
  39. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.d.ts +13 -0
  40. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.d.ts.map +1 -0
  41. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.js +28 -0
  42. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.d.ts +21 -0
  43. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.d.ts.map +1 -0
  44. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.js +28 -0
  45. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts +1 -2
  46. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +1 -1
  47. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +38 -26
  48. package/dist/src/account-lib/index.js +23 -9
  49. package/dist/src/account-lib/mpc/index.d.ts +1 -1
  50. package/dist/src/account-lib/mpc/index.d.ts.map +1 -1
  51. package/dist/src/account-lib/mpc/index.js +6 -2
  52. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +2 -3
  53. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
  54. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +376 -354
  55. package/dist/src/account-lib/mpc/tss/ecdsa/index.js +23 -9
  56. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +2 -2
  57. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
  58. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +3 -3
  59. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +46 -53
  60. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
  61. package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
  62. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts +0 -1
  63. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -1
  64. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +66 -69
  65. package/dist/src/account-lib/mpc/tss/eddsa/index.js +23 -9
  66. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts +1 -1
  67. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts.map +1 -1
  68. package/dist/src/account-lib/mpc/tss/eddsa/types.js +1 -1
  69. package/dist/src/account-lib/mpc/tss/index.js +23 -9
  70. package/dist/src/account-lib/mpc/util.d.ts +7 -1
  71. package/dist/src/account-lib/mpc/util.d.ts.map +1 -1
  72. package/dist/src/account-lib/mpc/util.js +24 -1
  73. package/dist/src/account-lib/staking/index.js +6 -2
  74. package/dist/src/account-lib/staking/utils.js +3 -3
  75. package/dist/src/account-lib/util/crypto.d.ts +8 -2
  76. package/dist/src/account-lib/util/crypto.d.ts.map +1 -1
  77. package/dist/src/account-lib/util/crypto.js +69 -38
  78. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +2 -1
  79. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +1 -1
  80. package/dist/src/account-lib/util/ed25519KeyDeriver.js +5 -3
  81. package/dist/src/api/bip32path.js +2 -3
  82. package/dist/src/api/index.js +6 -2
  83. package/dist/src/api/types.d.ts +31 -0
  84. package/dist/src/api/types.d.ts.map +1 -1
  85. package/dist/src/api/types.js +1 -1
  86. package/dist/src/bitgo/address-book/address-book.d.ts +61 -0
  87. package/dist/src/bitgo/address-book/address-book.d.ts.map +1 -0
  88. package/dist/src/bitgo/address-book/address-book.js +150 -0
  89. package/dist/src/bitgo/address-book/index.d.ts +3 -0
  90. package/dist/src/bitgo/address-book/index.d.ts.map +1 -0
  91. package/dist/src/bitgo/address-book/index.js +19 -0
  92. package/dist/src/bitgo/address-book/types.d.ts +170 -0
  93. package/dist/src/bitgo/address-book/types.d.ts.map +1 -0
  94. package/dist/src/bitgo/address-book/types.js +3 -0
  95. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +110 -11
  96. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
  97. package/dist/src/bitgo/baseCoin/baseCoin.js +169 -16
  98. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +270 -27
  99. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  100. package/dist/src/bitgo/baseCoin/iBaseCoin.js +14 -3
  101. package/dist/src/bitgo/baseCoin/index.js +6 -2
  102. package/dist/src/bitgo/bip32util.d.ts +3 -16
  103. package/dist/src/bitgo/bip32util.d.ts.map +1 -1
  104. package/dist/src/bitgo/bip32util.js +4 -56
  105. package/dist/src/bitgo/bitcoin.d.ts +0 -1
  106. package/dist/src/bitgo/bitcoin.d.ts.map +1 -1
  107. package/dist/src/bitgo/bitcoin.js +26 -13
  108. package/dist/src/bitgo/bitgoBase.d.ts +7 -3
  109. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
  110. package/dist/src/bitgo/bitgoBase.js +1 -1
  111. package/dist/src/bitgo/coinFactory.d.ts +17 -3
  112. package/dist/src/bitgo/coinFactory.d.ts.map +1 -1
  113. package/dist/src/bitgo/coinFactory.js +26 -3
  114. package/dist/src/bitgo/config.d.ts +3 -95
  115. package/dist/src/bitgo/config.d.ts.map +1 -1
  116. package/dist/src/bitgo/config.js +26 -15
  117. package/dist/src/bitgo/defi/defiVault.d.ts +117 -0
  118. package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -0
  119. package/dist/src/bitgo/defi/defiVault.js +354 -0
  120. package/dist/src/bitgo/defi/iDefiVault.d.ts +80 -0
  121. package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -0
  122. package/dist/src/bitgo/defi/iDefiVault.js +6 -0
  123. package/dist/src/bitgo/defi/index.d.ts +3 -0
  124. package/dist/src/bitgo/defi/index.d.ts.map +1 -0
  125. package/dist/src/bitgo/defi/index.js +22 -0
  126. package/dist/src/bitgo/ecdh.d.ts +0 -1
  127. package/dist/src/bitgo/ecdh.d.ts.map +1 -1
  128. package/dist/src/bitgo/ecdh.js +26 -13
  129. package/dist/src/bitgo/enterprise/enterprise.d.ts +9 -4
  130. package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
  131. package/dist/src/bitgo/enterprise/enterprise.js +47 -21
  132. package/dist/src/bitgo/enterprise/enterprises.js +27 -13
  133. package/dist/src/bitgo/enterprise/iEnterprise.d.ts +5 -3
  134. package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
  135. package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
  136. package/dist/src/bitgo/enterprise/index.js +6 -2
  137. package/dist/src/bitgo/environments.d.ts +68 -3
  138. package/dist/src/bitgo/environments.d.ts.map +1 -1
  139. package/dist/src/bitgo/environments.js +414 -34
  140. package/dist/src/bitgo/errors.d.ts +175 -0
  141. package/dist/src/bitgo/errors.d.ts.map +1 -1
  142. package/dist/src/bitgo/errors.js +166 -2
  143. package/dist/src/bitgo/evm/evmUtils.d.ts +26 -0
  144. package/dist/src/bitgo/evm/evmUtils.d.ts.map +1 -0
  145. package/dist/src/bitgo/evm/evmUtils.js +50 -0
  146. package/dist/src/bitgo/index.d.ts +5 -1
  147. package/dist/src/bitgo/index.d.ts.map +1 -1
  148. package/dist/src/bitgo/index.js +31 -11
  149. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts +3 -3
  150. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts.map +1 -1
  151. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.js +1 -1
  152. package/dist/src/bitgo/inscriptionBuilder/index.js +6 -2
  153. package/dist/src/bitgo/internal/index.js +6 -2
  154. package/dist/src/bitgo/internal/internal.js +5 -6
  155. package/dist/src/bitgo/internal/keycard.d.ts +12 -8
  156. package/dist/src/bitgo/internal/keycard.d.ts.map +1 -1
  157. package/dist/src/bitgo/internal/keycard.js +60 -48
  158. package/dist/src/bitgo/keychain/decryptKeychain.d.ts +14 -0
  159. package/dist/src/bitgo/keychain/decryptKeychain.d.ts.map +1 -0
  160. package/dist/src/bitgo/keychain/decryptKeychain.js +36 -0
  161. package/dist/src/bitgo/keychain/iKeychains.d.ts +108 -11
  162. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  163. package/dist/src/bitgo/keychain/iKeychains.js +2 -2
  164. package/dist/src/bitgo/keychain/index.d.ts +1 -0
  165. package/dist/src/bitgo/keychain/index.d.ts.map +1 -1
  166. package/dist/src/bitgo/keychain/index.js +7 -2
  167. package/dist/src/bitgo/keychain/keychains.d.ts +51 -7
  168. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  169. package/dist/src/bitgo/keychain/keychains.js +245 -52
  170. package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts +3 -3
  171. package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts.map +1 -1
  172. package/dist/src/bitgo/keychain/ovcJsonCodec.js +23 -9
  173. package/dist/src/bitgo/legacyBitcoin.d.ts +0 -1
  174. package/dist/src/bitgo/legacyBitcoin.d.ts.map +1 -1
  175. package/dist/src/bitgo/legacyBitcoin.js +27 -13
  176. package/dist/src/bitgo/lightning/lightningWalletUtil.d.ts +7 -0
  177. package/dist/src/bitgo/lightning/lightningWalletUtil.d.ts.map +1 -0
  178. package/dist/src/bitgo/lightning/lightningWalletUtil.js +25 -0
  179. package/dist/src/bitgo/market/iMarkets.d.ts +2 -2
  180. package/dist/src/bitgo/market/iMarkets.d.ts.map +1 -1
  181. package/dist/src/bitgo/market/index.js +6 -2
  182. package/dist/src/bitgo/market/markets.js +23 -9
  183. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +1 -0
  184. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
  185. package/dist/src/bitgo/pendingApproval/iPendingApproval.js +4 -4
  186. package/dist/src/bitgo/pendingApproval/index.js +6 -2
  187. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts +20 -8
  188. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
  189. package/dist/src/bitgo/pendingApproval/pendingApproval.js +228 -110
  190. package/dist/src/bitgo/pendingApproval/pendingApprovals.js +23 -9
  191. package/dist/src/bitgo/proofs/WalletProofs.d.ts +19 -0
  192. package/dist/src/bitgo/proofs/WalletProofs.d.ts.map +1 -0
  193. package/dist/src/bitgo/proofs/WalletProofs.js +37 -0
  194. package/dist/src/bitgo/proofs/index.d.ts +2 -0
  195. package/dist/src/bitgo/proofs/index.d.ts.map +1 -0
  196. package/dist/src/bitgo/proofs/index.js +6 -0
  197. package/dist/src/bitgo/proofs/types.d.ts +80 -0
  198. package/dist/src/bitgo/proofs/types.d.ts.map +1 -0
  199. package/dist/src/bitgo/proofs/types.js +80 -0
  200. package/dist/src/bitgo/recovery/index.js +6 -2
  201. package/dist/src/bitgo/recovery/initiate.d.ts +13 -3
  202. package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -1
  203. package/dist/src/bitgo/recovery/initiate.js +49 -41
  204. package/dist/src/bitgo/safe/iSafe.d.ts +85 -0
  205. package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -0
  206. package/dist/src/bitgo/safe/iSafe.js +3 -0
  207. package/dist/src/bitgo/safe/iSafes.d.ts +86 -0
  208. package/dist/src/bitgo/safe/iSafes.d.ts.map +1 -0
  209. package/dist/src/bitgo/safe/iSafes.js +3 -0
  210. package/dist/src/bitgo/safe/index.d.ts +5 -0
  211. package/dist/src/bitgo/safe/index.d.ts.map +1 -0
  212. package/dist/src/bitgo/safe/index.js +21 -0
  213. package/dist/src/bitgo/safe/safe.d.ts +66 -0
  214. package/dist/src/bitgo/safe/safe.d.ts.map +1 -0
  215. package/dist/src/bitgo/safe/safe.js +96 -0
  216. package/dist/src/bitgo/safe/safes.d.ts +104 -0
  217. package/dist/src/bitgo/safe/safes.d.ts.map +1 -0
  218. package/dist/src/bitgo/safe/safes.js +294 -0
  219. package/dist/src/bitgo/staking/goStakingInterfaces.d.ts +136 -0
  220. package/dist/src/bitgo/staking/goStakingInterfaces.d.ts.map +1 -0
  221. package/dist/src/bitgo/staking/goStakingInterfaces.js +3 -0
  222. package/dist/src/bitgo/staking/goStakingWallet.d.ts +62 -0
  223. package/dist/src/bitgo/staking/goStakingWallet.d.ts.map +1 -0
  224. package/dist/src/bitgo/staking/goStakingWallet.js +141 -0
  225. package/dist/src/bitgo/staking/iGoStakingWallet.d.ts +17 -0
  226. package/dist/src/bitgo/staking/iGoStakingWallet.d.ts.map +1 -0
  227. package/dist/src/bitgo/staking/iGoStakingWallet.js +3 -0
  228. package/dist/src/bitgo/staking/iStakingWallet.d.ts +178 -7
  229. package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
  230. package/dist/src/bitgo/staking/iStakingWallet.js +2 -2
  231. package/dist/src/bitgo/staking/index.d.ts +3 -0
  232. package/dist/src/bitgo/staking/index.d.ts.map +1 -1
  233. package/dist/src/bitgo/staking/index.js +9 -2
  234. package/dist/src/bitgo/staking/stakingWallet.d.ts +21 -8
  235. package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
  236. package/dist/src/bitgo/staking/stakingWallet.js +140 -7
  237. package/dist/src/bitgo/trading/iTradingAccount.d.ts +15 -1
  238. package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -1
  239. package/dist/src/bitgo/trading/iTradingAccount.js +1 -1
  240. package/dist/src/bitgo/trading/index.d.ts +1 -0
  241. package/dist/src/bitgo/trading/index.d.ts.map +1 -1
  242. package/dist/src/bitgo/trading/index.js +7 -2
  243. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts +8 -0
  244. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts.map +1 -0
  245. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.js +31 -0
  246. package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts +8 -0
  247. package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts.map +1 -0
  248. package/dist/src/bitgo/trading/network/decrypt-rsa.js +23 -0
  249. package/dist/src/bitgo/trading/network/decrypt.d.ts +14 -0
  250. package/dist/src/bitgo/trading/network/decrypt.d.ts.map +1 -0
  251. package/dist/src/bitgo/trading/network/decrypt.js +23 -0
  252. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts +8 -0
  253. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts.map +1 -0
  254. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.js +25 -0
  255. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts +8 -0
  256. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts.map +1 -0
  257. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.js +65 -0
  258. package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts +8 -0
  259. package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts.map +1 -0
  260. package/dist/src/bitgo/trading/network/encrypt-rsa.js +23 -0
  261. package/dist/src/bitgo/trading/network/encrypt.d.ts +37 -0
  262. package/dist/src/bitgo/trading/network/encrypt.d.ts.map +1 -0
  263. package/dist/src/bitgo/trading/network/encrypt.js +58 -0
  264. package/dist/src/bitgo/trading/network/index.d.ts +5 -0
  265. package/dist/src/bitgo/trading/network/index.d.ts.map +1 -0
  266. package/dist/src/bitgo/trading/network/index.js +21 -0
  267. package/dist/src/bitgo/trading/network/network.d.ts +36 -0
  268. package/dist/src/bitgo/trading/network/network.d.ts.map +1 -0
  269. package/dist/src/bitgo/trading/network/network.js +99 -0
  270. package/dist/src/bitgo/trading/network/types.d.ts +277 -0
  271. package/dist/src/bitgo/trading/network/types.d.ts.map +1 -0
  272. package/dist/src/bitgo/trading/network/types.js +3 -0
  273. package/dist/src/bitgo/trading/network/utils.d.ts +20 -0
  274. package/dist/src/bitgo/trading/network/utils.d.ts.map +1 -0
  275. package/dist/src/bitgo/trading/network/utils.js +54 -0
  276. package/dist/src/bitgo/trading/tradingAccount.d.ts +22 -1
  277. package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -1
  278. package/dist/src/bitgo/trading/tradingAccount.js +64 -7
  279. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts +38 -0
  280. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
  281. package/dist/src/bitgo/tss/bitgoPubKeys.js +72 -0
  282. package/dist/src/bitgo/tss/common.d.ts +40 -6
  283. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  284. package/dist/src/bitgo/tss/common.js +124 -17
  285. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +6 -4
  286. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
  287. package/dist/src/bitgo/tss/ecdsa/ecdsa.js +78 -66
  288. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts +15 -0
  289. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  290. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.js +167 -0
  291. package/dist/src/bitgo/tss/ecdsa/index.d.ts +1 -0
  292. package/dist/src/bitgo/tss/ecdsa/index.d.ts.map +1 -1
  293. package/dist/src/bitgo/tss/ecdsa/index.js +25 -10
  294. package/dist/src/bitgo/tss/ecdsa/types.d.ts +27 -27
  295. package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
  296. package/dist/src/bitgo/tss/ecdsa/types.js +3 -3
  297. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts +15 -6
  298. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts.map +1 -1
  299. package/dist/src/bitgo/tss/eddsa/eddsa.js +47 -40
  300. package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts +37 -0
  301. package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
  302. package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.js +95 -0
  303. package/dist/src/bitgo/tss/eddsa/index.js +23 -9
  304. package/dist/src/bitgo/tss/eddsa/types.d.ts +4 -4
  305. package/dist/src/bitgo/tss/eddsa/types.d.ts.map +1 -1
  306. package/dist/src/bitgo/tss/index.d.ts +3 -2
  307. package/dist/src/bitgo/tss/index.d.ts.map +1 -1
  308. package/dist/src/bitgo/tss/index.js +26 -10
  309. package/dist/src/bitgo/tss/types.d.ts +3 -3
  310. package/dist/src/bitgo/tss/types.d.ts.map +1 -1
  311. package/dist/src/bitgo/tss/types.js +2 -2
  312. package/dist/src/bitgo/types.d.ts +3 -3
  313. package/dist/src/bitgo/types.d.ts.map +1 -1
  314. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +8 -0
  315. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -1
  316. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +55 -13
  317. package/dist/src/bitgo/utils/codecProps.js +24 -11
  318. package/dist/src/bitgo/utils/codecs.d.ts +11 -0
  319. package/dist/src/bitgo/utils/codecs.d.ts.map +1 -0
  320. package/dist/src/bitgo/utils/codecs.js +59 -0
  321. package/dist/src/bitgo/utils/decode.d.ts.map +1 -1
  322. package/dist/src/bitgo/utils/decode.js +30 -16
  323. package/dist/src/bitgo/utils/index.d.ts +4 -2
  324. package/dist/src/bitgo/utils/index.d.ts.map +1 -1
  325. package/dist/src/bitgo/utils/index.js +27 -11
  326. package/dist/src/bitgo/utils/messageTypes.d.ts +40 -0
  327. package/dist/src/bitgo/utils/messageTypes.d.ts.map +1 -0
  328. package/dist/src/bitgo/utils/messageTypes.js +17 -0
  329. package/dist/src/bitgo/utils/mpcUtils.d.ts +4 -4
  330. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  331. package/dist/src/bitgo/utils/mpcUtils.js +160 -14
  332. package/dist/src/bitgo/utils/notEmpty.d.ts +2 -0
  333. package/dist/src/bitgo/utils/notEmpty.d.ts.map +1 -0
  334. package/dist/src/bitgo/utils/notEmpty.js +7 -0
  335. package/dist/src/bitgo/utils/opengpgUtils.d.ts +10 -7
  336. package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
  337. package/dist/src/bitgo/utils/opengpgUtils.js +75 -62
  338. package/dist/src/bitgo/utils/postWithCodec.d.ts.map +1 -1
  339. package/dist/src/bitgo/utils/postWithCodec.js +4 -38
  340. package/dist/src/bitgo/utils/promise-utils.d.ts +1 -1
  341. package/dist/src/bitgo/utils/promise-utils.d.ts.map +1 -1
  342. package/dist/src/bitgo/utils/promise-utils.js +2 -3
  343. package/dist/src/bitgo/utils/transactionUtils.d.ts +9 -0
  344. package/dist/src/bitgo/utils/transactionUtils.d.ts.map +1 -0
  345. package/dist/src/bitgo/utils/transactionUtils.js +29 -0
  346. package/dist/src/bitgo/utils/triple.d.ts +1 -1
  347. package/dist/src/bitgo/utils/triple.d.ts.map +1 -1
  348. package/dist/src/bitgo/utils/triple.js +2 -3
  349. package/dist/src/bitgo/utils/tss/addressVerification.d.ts +62 -0
  350. package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
  351. package/dist/src/bitgo/utils/tss/addressVerification.js +93 -0
  352. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +97 -18
  353. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  354. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +309 -46
  355. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +417 -46
  356. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  357. package/dist/src/bitgo/utils/tss/baseTypes.js +47 -22
  358. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts +23 -0
  359. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts.map +1 -0
  360. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.js +157 -0
  361. package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts +28 -0
  362. package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts.map +1 -0
  363. package/dist/src/bitgo/utils/tss/ecdsa/base.js +53 -0
  364. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +25 -51
  365. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  366. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +172 -246
  367. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +216 -0
  368. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  369. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +1050 -0
  370. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +8 -0
  371. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -0
  372. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +16 -0
  373. package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +4 -0
  374. package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
  375. package/dist/src/bitgo/utils/tss/ecdsa/index.js +10 -2
  376. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +7 -10
  377. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
  378. package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
  379. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +107 -0
  380. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -0
  381. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +55 -0
  382. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts +21 -0
  383. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts.map +1 -0
  384. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.js +118 -0
  385. package/dist/src/bitgo/utils/tss/eddsa/base.d.ts +18 -0
  386. package/dist/src/bitgo/utils/tss/eddsa/base.d.ts.map +1 -0
  387. package/dist/src/bitgo/utils/tss/eddsa/base.js +64 -0
  388. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +38 -11
  389. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  390. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +254 -96
  391. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +156 -0
  392. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
  393. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +737 -0
  394. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts +6 -0
  395. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts.map +1 -0
  396. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.js +16 -0
  397. package/dist/src/bitgo/utils/tss/eddsa/index.d.ts +4 -0
  398. package/dist/src/bitgo/utils/tss/eddsa/index.d.ts.map +1 -1
  399. package/dist/src/bitgo/utils/tss/eddsa/index.js +29 -8
  400. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +12 -7
  401. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
  402. package/dist/src/bitgo/utils/tss/eddsa/types.js +1 -1
  403. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts +40 -0
  404. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts.map +1 -0
  405. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.js +44 -0
  406. package/dist/src/bitgo/utils/tss/index.d.ts +3 -0
  407. package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
  408. package/dist/src/bitgo/utils/tss/index.js +26 -9
  409. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts +23 -0
  410. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  411. package/dist/src/bitgo/utils/tss/preHashedSignable.js +26 -0
  412. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +33 -0
  413. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
  414. package/dist/src/bitgo/utils/tss/recipientUtils.js +118 -0
  415. package/dist/src/bitgo/utils/txRequest.d.ts +10 -0
  416. package/dist/src/bitgo/utils/txRequest.d.ts.map +1 -0
  417. package/dist/src/bitgo/utils/txRequest.js +49 -0
  418. package/dist/src/bitgo/utils/util.js +24 -10
  419. package/dist/src/bitgo/utils/wallet.d.ts +7 -0
  420. package/dist/src/bitgo/utils/wallet.d.ts.map +1 -0
  421. package/dist/src/bitgo/utils/wallet.js +48 -0
  422. package/dist/src/bitgo/wallet/BuildParams.d.ts +80 -1
  423. package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
  424. package/dist/src/bitgo/wallet/BuildParams.js +83 -11
  425. package/dist/src/bitgo/wallet/iWallet.d.ts +528 -25
  426. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  427. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  428. package/dist/src/bitgo/wallet/iWallets.d.ts +298 -16
  429. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  430. package/dist/src/bitgo/wallet/iWallets.js +63 -3
  431. package/dist/src/bitgo/wallet/index.js +6 -2
  432. package/dist/src/bitgo/wallet/wallet.d.ts +353 -27
  433. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  434. package/dist/src/bitgo/wallet/wallet.js +2123 -371
  435. package/dist/src/bitgo/wallet/wallets.d.ts +93 -4
  436. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  437. package/dist/src/bitgo/wallet/wallets.js +1146 -155
  438. package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts +12 -0
  439. package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts.map +1 -0
  440. package/dist/src/bitgo/walletUtil/iMessageProvider.js +3 -0
  441. package/dist/src/bitgo/walletUtil/index.d.ts +3 -0
  442. package/dist/src/bitgo/walletUtil/index.d.ts.map +1 -0
  443. package/dist/src/bitgo/walletUtil/index.js +19 -0
  444. package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts +22 -0
  445. package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts.map +1 -0
  446. package/dist/src/bitgo/walletUtil/midnightMessageProvider.js +95 -0
  447. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts +9 -0
  448. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts.map +1 -0
  449. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.js +72 -0
  450. package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts +15 -0
  451. package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts.map +1 -0
  452. package/dist/src/bitgo/walletUtil/utxoMessageProof.js +40 -0
  453. package/dist/src/bitgo/webhook/index.js +6 -2
  454. package/dist/src/bitgo/webhook/webhooks.js +23 -9
  455. package/dist/src/coins/fiat.d.ts +45 -0
  456. package/dist/src/coins/fiat.d.ts.map +1 -0
  457. package/dist/src/coins/fiat.js +94 -0
  458. package/dist/src/coins/index.d.ts +1 -6
  459. package/dist/src/coins/index.d.ts.map +1 -1
  460. package/dist/src/coins/index.js +7 -8
  461. package/dist/src/coins/ofc.d.ts +21 -2
  462. package/dist/src/coins/ofc.d.ts.map +1 -1
  463. package/dist/src/coins/ofc.js +29 -3
  464. package/dist/src/coins/ofcToken.d.ts +15 -4
  465. package/dist/src/coins/ofcToken.d.ts.map +1 -1
  466. package/dist/src/coins/ofcToken.js +43 -5
  467. package/dist/src/coins/susd.d.ts +3 -2
  468. package/dist/src/coins/susd.d.ts.map +1 -1
  469. package/dist/src/coins/susd.js +5 -1
  470. package/dist/src/common.js +27 -13
  471. package/dist/src/index.d.ts +7 -1
  472. package/dist/src/index.d.ts.map +1 -1
  473. package/dist/src/index.js +32 -11
  474. package/dist/src/lightning.d.ts +20 -0
  475. package/dist/src/lightning.d.ts.map +1 -0
  476. package/dist/src/lightning.js +13 -0
  477. package/dist/src/units.js +5 -6
  478. package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.d.ts +2 -0
  479. package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.d.ts.map +1 -0
  480. package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.js +207 -0
  481. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.d.ts +2 -0
  482. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.d.ts.map +1 -0
  483. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.js +174 -0
  484. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts +2 -0
  485. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts.map +1 -0
  486. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.js +108 -0
  487. package/dist/test/unit/account-lib/baseCoin/messages/fixtures.d.ts +46 -0
  488. package/dist/test/unit/account-lib/baseCoin/messages/fixtures.d.ts.map +1 -0
  489. package/dist/test/unit/account-lib/baseCoin/messages/fixtures.js +69 -0
  490. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.js +91 -29
  491. package/dist/test/unit/account-lib/mpc/util.d.ts +2 -0
  492. package/dist/test/unit/account-lib/mpc/util.d.ts.map +1 -0
  493. package/dist/test/unit/account-lib/mpc/util.js +53 -0
  494. package/dist/test/unit/bitgo/address-book/address-book.d.ts +2 -0
  495. package/dist/test/unit/bitgo/address-book/address-book.d.ts.map +1 -0
  496. package/dist/test/unit/bitgo/address-book/address-book.js +159 -0
  497. package/dist/test/unit/bitgo/defi/defiVault.d.ts +2 -0
  498. package/dist/test/unit/bitgo/defi/defiVault.d.ts.map +1 -0
  499. package/dist/test/unit/bitgo/defi/defiVault.js +542 -0
  500. package/dist/test/unit/bitgo/environment.d.ts +2 -0
  501. package/dist/test/unit/bitgo/environment.d.ts.map +1 -0
  502. package/dist/test/unit/bitgo/environment.js +38 -0
  503. package/dist/test/unit/bitgo/errors.d.ts +2 -0
  504. package/dist/test/unit/bitgo/errors.d.ts.map +1 -0
  505. package/dist/test/unit/bitgo/errors.js +262 -0
  506. package/dist/test/unit/bitgo/recovery/initiate.d.ts +2 -0
  507. package/dist/test/unit/bitgo/recovery/initiate.d.ts.map +1 -0
  508. package/dist/test/unit/bitgo/recovery/initiate.js +159 -0
  509. package/dist/test/unit/bitgo/safe/safe.d.ts +2 -0
  510. package/dist/test/unit/bitgo/safe/safe.d.ts.map +1 -0
  511. package/dist/test/unit/bitgo/safe/safe.js +134 -0
  512. package/dist/test/unit/bitgo/safe/safes.d.ts +2 -0
  513. package/dist/test/unit/bitgo/safe/safes.d.ts.map +1 -0
  514. package/dist/test/unit/bitgo/safe/safes.js +297 -0
  515. package/dist/test/unit/bitgo/trading/network/encrypt.d.ts +2 -0
  516. package/dist/test/unit/bitgo/trading/network/encrypt.d.ts.map +1 -0
  517. package/dist/test/unit/bitgo/trading/network/encrypt.js +71 -0
  518. package/dist/test/unit/bitgo/trading/tradingAccount.d.ts +2 -0
  519. package/dist/test/unit/bitgo/trading/tradingAccount.d.ts.map +1 -0
  520. package/dist/test/unit/bitgo/trading/tradingAccount.js +192 -0
  521. package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.js +24 -4
  522. package/dist/test/unit/bitgo/utils/messageTypes.d.ts +2 -0
  523. package/dist/test/unit/bitgo/utils/messageTypes.d.ts.map +1 -0
  524. package/dist/test/unit/bitgo/utils/messageTypes.js +64 -0
  525. package/dist/test/unit/bitgo/utils/notEmpty.d.ts +2 -0
  526. package/dist/test/unit/bitgo/utils/notEmpty.d.ts.map +1 -0
  527. package/dist/test/unit/bitgo/utils/notEmpty.js +15 -0
  528. package/dist/test/unit/bitgo/utils/postWithCodec.js +32 -38
  529. package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts +2 -0
  530. package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
  531. package/dist/test/unit/bitgo/utils/tss/addressVerification.js +251 -0
  532. package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts +2 -0
  533. package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -0
  534. package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +399 -0
  535. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts +2 -0
  536. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts.map +1 -0
  537. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.js +94 -0
  538. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +2 -0
  539. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  540. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +999 -0
  541. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts +5 -0
  542. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts.map +1 -0
  543. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.js +36 -0
  544. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts +2 -0
  545. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts.map +1 -0
  546. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.js +158 -0
  547. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +2 -0
  548. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
  549. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +1524 -0
  550. package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.d.ts +2 -0
  551. package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.d.ts.map +1 -0
  552. package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.js +311 -0
  553. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts +2 -0
  554. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  555. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.js +55 -0
  556. package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts +2 -0
  557. package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
  558. package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +172 -0
  559. package/dist/test/unit/bitgo/utils/txRequest.d.ts +2 -0
  560. package/dist/test/unit/bitgo/utils/txRequest.d.ts.map +1 -0
  561. package/dist/test/unit/bitgo/utils/txRequest.js +179 -0
  562. package/dist/test/unit/bitgo/wallet/BuildParams.d.ts +2 -0
  563. package/dist/test/unit/bitgo/wallet/BuildParams.d.ts.map +1 -0
  564. package/dist/test/unit/bitgo/wallet/BuildParams.js +124 -0
  565. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.js +30 -9
  566. package/dist/test/unit/bitgo/wallet/getAccountResources.d.ts +2 -0
  567. package/dist/test/unit/bitgo/wallet/getAccountResources.d.ts.map +1 -0
  568. package/dist/test/unit/bitgo/wallet/getAccountResources.js +133 -0
  569. package/dist/test/unit/bitgo/wallet/getResourceDelegations.d.ts +2 -0
  570. package/dist/test/unit/bitgo/wallet/getResourceDelegations.d.ts.map +1 -0
  571. package/dist/test/unit/bitgo/wallet/getResourceDelegations.js +118 -0
  572. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts +2 -0
  573. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts.map +1 -0
  574. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.js +141 -0
  575. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts +2 -0
  576. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts.map +1 -0
  577. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.js +185 -0
  578. package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts +3 -0
  579. package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts.map +1 -0
  580. package/dist/test/unit/bitgo/wallet/resourceManagement.js +441 -0
  581. package/dist/test/unit/bitgo/wallet/tokenApproval.d.ts +2 -0
  582. package/dist/test/unit/bitgo/wallet/tokenApproval.d.ts.map +1 -0
  583. package/dist/test/unit/bitgo/wallet/tokenApproval.js +201 -0
  584. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts +2 -0
  585. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts.map +1 -0
  586. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.js +181 -0
  587. package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts +2 -0
  588. package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts.map +1 -0
  589. package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.js +43 -0
  590. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts +2 -0
  591. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts.map +1 -0
  592. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.js +320 -0
  593. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts +2 -0
  594. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts.map +1 -0
  595. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +228 -0
  596. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts +2 -0
  597. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts.map +1 -0
  598. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.js +216 -0
  599. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts +2 -0
  600. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts.map +1 -0
  601. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +670 -0
  602. package/dist/test/unit/bitgo/wallet/walletsWebauthn.d.ts +2 -0
  603. package/dist/test/unit/bitgo/wallet/walletsWebauthn.d.ts.map +1 -0
  604. package/dist/test/unit/bitgo/wallet/walletsWebauthn.js +201 -0
  605. package/dist/test/unit/coins/ofc.d.ts +2 -0
  606. package/dist/test/unit/coins/ofc.d.ts.map +1 -0
  607. package/dist/test/unit/coins/ofc.js +124 -0
  608. package/dist/test/unit/lightning.d.ts +2 -0
  609. package/dist/test/unit/lightning.d.ts.map +1 -0
  610. package/dist/test/unit/lightning.js +23 -0
  611. package/dist/test/unit/units.d.ts.map +1 -1
  612. package/dist/test/unit/units.js +64 -64
  613. package/dist/tsconfig.tsbuildinfo +1 -1
  614. package/package.json +24 -21
  615. package/.eslintignore +0 -5
  616. package/CHANGELOG.md +0 -1638
  617. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +0 -77
  618. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +0 -1
  619. package/dist/src/account-lib/baseCoin/blsKeyPair.js +0 -209
  620. package/dist/src/bitgo/lightning/iLightning.d.ts +0 -186
  621. package/dist/src/bitgo/lightning/iLightning.d.ts.map +0 -1
  622. package/dist/src/bitgo/lightning/iLightning.js +0 -106
  623. package/dist/src/bitgo/lightning/index.d.ts +0 -5
  624. package/dist/src/bitgo/lightning/index.d.ts.map +0 -1
  625. package/dist/src/bitgo/lightning/index.js +0 -17
  626. package/dist/src/bitgo/lightning/lightning.d.ts +0 -25
  627. package/dist/src/bitgo/lightning/lightning.d.ts.map +0 -1
  628. package/dist/src/bitgo/lightning/lightning.js +0 -111
  629. package/dist/src/bitgo/lightning/lightningUtils.d.ts +0 -46
  630. package/dist/src/bitgo/lightning/lightningUtils.d.ts.map +0 -1
  631. package/dist/src/bitgo/lightning/lightningUtils.js +0 -133
  632. package/dist/src/bitgo/lightning/lnurlCodec.d.ts +0 -3
  633. package/dist/src/bitgo/lightning/lnurlCodec.d.ts.map +0 -1
  634. package/dist/src/bitgo/lightning/lnurlCodec.js +0 -28
  635. package/dist/src/bitgo/utils/blsUtils.d.ts +0 -52
  636. package/dist/src/bitgo/utils/blsUtils.d.ts.map +0 -1
  637. package/dist/src/bitgo/utils/blsUtils.js +0 -237
  638. package/dist/src/bitgo/utils/iBlsUtils.d.ts +0 -14
  639. package/dist/src/bitgo/utils/iBlsUtils.d.ts.map +0 -1
  640. package/dist/src/bitgo/utils/iBlsUtils.js +0 -3
  641. package/dist/src/coins/fiateur.d.ts +0 -31
  642. package/dist/src/coins/fiateur.d.ts.map +0 -1
  643. package/dist/src/coins/fiateur.js +0 -57
  644. package/dist/src/coins/fiatgbp.d.ts +0 -31
  645. package/dist/src/coins/fiatgbp.d.ts.map +0 -1
  646. package/dist/src/coins/fiatgbp.js +0 -57
  647. package/dist/src/coins/fiatusd.d.ts +0 -31
  648. package/dist/src/coins/fiatusd.d.ts.map +0 -1
  649. package/dist/src/coins/fiatusd.js +0 -57
  650. package/dist/src/coins/tfiateur.d.ts +0 -11
  651. package/dist/src/coins/tfiateur.d.ts.map +0 -1
  652. package/dist/src/coins/tfiateur.js +0 -17
  653. package/dist/src/coins/tfiatgbp.d.ts +0 -11
  654. package/dist/src/coins/tfiatgbp.d.ts.map +0 -1
  655. package/dist/src/coins/tfiatgbp.js +0 -17
  656. package/dist/src/coins/tfiatusd.d.ts +0 -11
  657. package/dist/src/coins/tfiatusd.d.ts.map +0 -1
  658. package/dist/src/coins/tfiatusd.js +0 -17
  659. package/dist/src/openssl/index.d.ts +0 -5
  660. package/dist/src/openssl/index.d.ts.map +0 -1
  661. package/dist/src/openssl/index.js +0 -9
  662. package/dist/test/unit/openssl.d.ts +0 -2
  663. package/dist/test/unit/openssl.d.ts.map +0 -1
  664. package/dist/test/unit/openssl.js +0 -39
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,12 +15,25 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
20
37
  };
21
38
  Object.defineProperty(exports, "__esModule", { value: true });
22
39
  exports.PendingApproval = void 0;
@@ -24,17 +41,37 @@ exports.PendingApproval = void 0;
24
41
  * @prettier
25
42
  */
26
43
  const _ = __importStar(require("lodash"));
27
- const common = __importStar(require("../../common"));
28
44
  const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
29
45
  const pendingApproval_1 = require("../pendingApproval");
30
46
  const utils_1 = require("../utils");
31
47
  const BuildParams_1 = require("../wallet/BuildParams");
48
+ const eddsa_1 = __importStar(require("../utils/tss/eddsa"));
49
+ const ecdsa_1 = require("../utils/tss/ecdsa");
50
+ const common_1 = require("../tss/common");
51
+ const assert_1 = __importDefault(require("assert"));
32
52
  class PendingApproval {
33
53
  constructor(bitgo, baseCoin, pendingApprovalData, wallet) {
34
54
  this.bitgo = bitgo;
35
55
  this.baseCoin = baseCoin;
36
56
  this.wallet = wallet;
37
- this.tssUtils = new utils_1.TssUtils(this.bitgo, this.baseCoin, wallet);
57
+ if (this.baseCoin.supportsTss()) {
58
+ if (this.baseCoin.getMPCAlgorithm() === 'ecdsa') {
59
+ if (this.wallet?.multisigTypeVersion() === 'MPCv2') {
60
+ this.tssUtils = new ecdsa_1.EcdsaMPCv2Utils(this.bitgo, this.baseCoin, wallet);
61
+ }
62
+ else {
63
+ this.tssUtils = new ecdsa_1.EcdsaUtils(this.bitgo, this.baseCoin, wallet);
64
+ }
65
+ }
66
+ else {
67
+ if (this.wallet?.multisigTypeVersion() === 'MPCv2') {
68
+ this.tssUtils = new eddsa_1.EddsaMPCv2Utils(this.bitgo, this.baseCoin, wallet);
69
+ }
70
+ else {
71
+ this.tssUtils = new eddsa_1.default(this.bitgo, this.baseCoin, wallet);
72
+ }
73
+ }
74
+ }
38
75
  this._pendingApproval = pendingApprovalData;
39
76
  }
40
77
  /**
@@ -43,6 +80,9 @@ class PendingApproval {
43
80
  id() {
44
81
  return this._pendingApproval.id;
45
82
  }
83
+ toJSON() {
84
+ return this._pendingApproval;
85
+ }
46
86
  /**
47
87
  * Get the owner type (wallet or enterprise)
48
88
  * Pending approvals can be approved or modified by different scopes (depending on how they were created)
@@ -123,109 +163,31 @@ class PendingApproval {
123
163
  this._pendingApproval = await this.bitgo.get(this.url()).result();
124
164
  return this;
125
165
  }
126
- /**
127
- * Helper function to ensure that self.wallet is set
128
- */
129
- async populateWallet() {
130
- const transactionRequest = this.info().transactionRequest;
131
- if (_.isUndefined(transactionRequest)) {
132
- throw new Error('missing required object property transactionRequest');
133
- }
134
- if (_.isUndefined(this.wallet)) {
135
- const updatedWallet = await this.baseCoin.wallets().get({ id: transactionRequest.sourceWallet });
136
- if (_.isUndefined(updatedWallet)) {
137
- throw new Error('unexpected - unable to get wallet using sourcewallet');
138
- }
139
- this.wallet = updatedWallet;
140
- }
141
- if (this.wallet.id() !== transactionRequest.sourceWallet) {
142
- throw new Error('unexpected source wallet for pending approval');
143
- }
144
- // otherwise returns undefined
145
- return;
146
- }
147
166
  /**
148
167
  * Sets this PendingApproval to an approved state
149
168
  */
150
169
  async approve(params = {}) {
151
- var _a, _b, _c, _d, _e, _f;
152
- common.validateParams(params, [], ['walletPassphrase', 'otp']);
153
- let canRecreateTransaction = true;
154
170
  params.previewPendingTxs = true;
155
171
  params.pendingApprovalId = this.id();
156
- /*
157
- * Cold wallets cannot recreate transactions if the only thing provided is the wallet passphrase
158
- *
159
- * The transaction can be recreated if either
160
- * – there is an xprv
161
- * – there is a walletPassphrase and the wallet is not cold (because if it's cold, the passphrase is of little use)
162
- *
163
- * Therefore, if neither of these is true, the transaction cannot be recreated, which is reflected in the if
164
- * statement below.
165
- */
166
- const isColdWallet = !!_.get(this.wallet, '_wallet.isCold');
167
- const isOFCWallet = this.baseCoin.getFamily() === 'ofc'; // Off-chain transactions don't need to be rebuilt
168
- if (!params.xprv && !(params.walletPassphrase && !isColdWallet && !isOFCWallet)) {
169
- canRecreateTransaction = false;
170
- }
171
- // If there are no recipients, then the transaction cannot be recreated
172
- const recipients = ((_c = (_b = (_a = this.info()) === null || _a === void 0 ? void 0 : _a.transactionRequest) === null || _b === void 0 ? void 0 : _b.buildParams) === null || _c === void 0 ? void 0 : _c.recipients) || [];
173
- const type = (_f = (_e = (_d = this.info()) === null || _d === void 0 ? void 0 : _d.transactionRequest) === null || _e === void 0 ? void 0 : _e.buildParams) === null || _f === void 0 ? void 0 : _f.type;
174
- // We only want to not recreate transactions with no recipients if it is a UTXO coin.
175
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
176
- if (utxolib.isValidNetwork(this.baseCoin.network) && recipients.length === 0 && type !== 'consolidate') {
177
- canRecreateTransaction = false;
178
- }
172
+ const canRecreateTransaction = this.canRecreateTransaction(params);
179
173
  const reqId = new utils_1.RequestTracer();
180
- /*
181
- * Internal helper function to get the serialized transaction which is being approved
182
- */
183
- const getApprovalTransaction = async () => {
184
- if (this.type() === 'transactionRequest') {
185
- /*
186
- * If this is a request for approving a transaction, depending on whether this user has a private key to the wallet
187
- * (some admins may not have the spend permission), the transaction could either be rebroadcast as is, or it could
188
- * be reconstructed. It is preferable to reconstruct a tx in order to adhere to the latest network conditions
189
- * such as newer unspents, different fees, or a higher sequence id
190
- */
191
- if (params.tx) {
192
- // the approval tx was reconstructed and explicitly specified - pass it through
193
- return {
194
- txHex: params.tx,
195
- };
196
- }
197
- const transaction = _.get(this.info(), `transactionRequest.coinSpecific.${this.baseCoin.type}`);
198
- // this user may not have spending privileges or a passphrase may not have been passed in
199
- if (!canRecreateTransaction) {
200
- if (!_.isObject(transaction)) {
201
- throw new Error('there is neither an original transaction object nor can a new one be recreated');
202
- }
203
- return transaction;
204
- }
205
- this.bitgo.setRequestTracer(reqId);
206
- await this.populateWallet();
207
- if (this._pendingApproval.txRequestId) {
208
- return await this.recreateAndSignTSSTransaction(params, reqId);
209
- }
210
- return await this.recreateAndSignTransaction(params);
211
- }
212
- };
213
- /*
214
- * Internal helper function to prepare the approval payload and send it to bitgo
215
- */
216
- const sendApproval = (transaction) => {
174
+ this.bitgo.setRequestTracer(reqId);
175
+ await this.populateWallet();
176
+ try {
177
+ const transaction = await this.preApprove(params, reqId);
217
178
  const approvalParams = { state: 'approved', otp: params.otp };
218
179
  if (transaction) {
219
180
  // if the transaction already has a half signed property, we take that directly
220
181
  approvalParams.halfSigned = transaction.halfSigned || transaction;
221
182
  }
222
- this.bitgo.setRequestTracer(reqId);
223
- return this.bitgo.put(this.url()).send(approvalParams).result();
224
- };
225
- try {
226
- const approvalTransaction = (await getApprovalTransaction());
227
- this.bitgo.setRequestTracer(reqId);
228
- return await sendApproval(approvalTransaction);
183
+ const response = await this.bitgo.put(this.url()).send(approvalParams).result();
184
+ // if the response comes with an error, means that the transaction triggered another condition
185
+ if (response.hasOwnProperty('error') && response.hasOwnProperty('pendingApproval')) {
186
+ return response;
187
+ }
188
+ this._pendingApproval = response;
189
+ await this.postApprove(params, reqId);
190
+ return this._pendingApproval;
229
191
  }
230
192
  catch (e) {
231
193
  if (!canRecreateTransaction &&
@@ -271,15 +233,29 @@ class PendingApproval {
271
233
  }
272
234
  const decryptedPrv = await this.wallet.getPrv({ walletPassphrase });
273
235
  const txRequest = await this.tssUtils.recreateTxRequest(txRequestId, decryptedPrv, reqId);
274
- return {
275
- txHex: txRequest.unsignedTxs[0].serializedTxHex,
276
- };
236
+ if (txRequest.apiVersion === 'lite') {
237
+ if (!txRequest.unsignedTxs || txRequest.unsignedTxs.length === 0) {
238
+ throw new Error('Unexpected error, no transactions found in txRequest.');
239
+ }
240
+ return {
241
+ txHex: txRequest.unsignedTxs[0].serializedTxHex,
242
+ };
243
+ }
244
+ else {
245
+ if (!txRequest.transactions || txRequest.transactions.length === 0) {
246
+ throw new Error('Unexpected error, no transactions found in txRequest.');
247
+ }
248
+ return {
249
+ txHex: txRequest.transactions[0].unsignedTx.serializedTxHex,
250
+ };
251
+ }
277
252
  }
278
253
  /**
279
254
  * Recreate a transaction for a pending approval to respond to updated network conditions
280
255
  * @param params
256
+ * @param reqId
281
257
  */
282
- async recreateAndSignTransaction(params = {}) {
258
+ async recreateAndSignTransaction(params = {}, reqId) {
283
259
  // this method only makes sense with existing transaction requests
284
260
  const transactionRequest = this.info().transactionRequest;
285
261
  if (_.isUndefined(transactionRequest)) {
@@ -290,31 +266,34 @@ class PendingApproval {
290
266
  }
291
267
  const originalPrebuild = transactionRequest.coinSpecific[this.baseCoin.type];
292
268
  const recipients = transactionRequest.recipients;
293
- const prebuildParams = _.extend({}, params, { recipients: recipients }, transactionRequest.buildParams);
269
+ let prebuildParams = _.extend({}, params, { recipients: recipients }, transactionRequest.buildParams);
294
270
  if (!_.isUndefined(originalPrebuild.hopTransaction)) {
295
271
  prebuildParams.hop = true;
296
272
  }
273
+ const reqTracer = reqId || new utils_1.RequestTracer();
297
274
  if (transactionRequest.buildParams && transactionRequest.buildParams.type === 'consolidate') {
298
275
  // consolidate tag is in the build params - this is a consolidation transaction, so
299
276
  // it needs to be rebuilt using the special consolidation build route
277
+ this.bitgo.setRequestTracer(reqTracer);
300
278
  prebuildParams.prebuildTx = await this.bitgo
301
279
  .post(this.wallet.url(`/consolidateUnspents`))
302
280
  .send(BuildParams_1.BuildParams.encode(prebuildParams))
303
281
  .result();
304
282
  delete prebuildParams.recipients;
305
283
  }
284
+ prebuildParams = _.extend({}, prebuildParams, { reqId: reqId });
306
285
  const signedTransaction = await this.wallet.prebuildAndSignTransaction(prebuildParams);
307
286
  // compare PAYGo fees
308
- const originalParsedTransaction = (await this.baseCoin.parseTransaction({
287
+ const originalParsedTransaction = await this.baseCoin.parseTransaction({
309
288
  txParams: prebuildParams,
310
289
  wallet: this.wallet,
311
290
  txPrebuild: originalPrebuild,
312
- }));
313
- const recreatedParsedTransaction = (await this.baseCoin.parseTransaction({
291
+ });
292
+ const recreatedParsedTransaction = await this.baseCoin.parseTransaction({
314
293
  txParams: prebuildParams,
315
294
  wallet: this.wallet,
316
295
  txPrebuild: signedTransaction,
317
- }));
296
+ });
318
297
  if (_.isUndefined(recreatedParsedTransaction.implicitExternalSpendAmount)) {
319
298
  return signedTransaction;
320
299
  }
@@ -328,6 +307,145 @@ class PendingApproval {
328
307
  }
329
308
  return signedTransaction;
330
309
  }
310
+ /*
311
+ * Cold wallets cannot recreate transactions if the only thing provided is the wallet passphrase
312
+ *
313
+ * The transaction can be recreated if either
314
+ * – there is an xprv
315
+ * – there is a walletPassphrase and the wallet is not cold (because if it's cold, the passphrase is of little use)
316
+ *
317
+ * Therefore, if neither of these is true, the transaction cannot be recreated, which is reflected in the if
318
+ * statement below.
319
+ *
320
+ * Lightning transactions cannot be recreated.
321
+ */
322
+ canRecreateTransaction(params) {
323
+ const isColdWallet = !!_.get(this.wallet, '_wallet.isCold');
324
+ const isOFCWallet = this.baseCoin.getFamily() === 'ofc'; // Off-chain transactions don't need to be rebuilt
325
+ const isLightningWallet = this.baseCoin.getFamily() === 'lnbtc';
326
+ if (isLightningWallet) {
327
+ return false;
328
+ }
329
+ if (!params.xprv && !(params.walletPassphrase && !isColdWallet && !isOFCWallet)) {
330
+ return false;
331
+ }
332
+ // If there are no recipients, then the transaction cannot be recreated
333
+ const recipients = this.info()?.transactionRequest?.buildParams?.recipients || [];
334
+ const type = this.info()?.transactionRequest?.buildParams?.type;
335
+ // We only want to not recreate transactions with no recipients if it is a UTXO coin.
336
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
337
+ return !(utxolib.isValidNetwork(this.baseCoin.network) &&
338
+ recipients.length === 0 &&
339
+ type !== 'consolidate');
340
+ }
341
+ /*
342
+ * Internal helper function to get the serialized transaction which is being approved.
343
+ * If this PA is of type 'transactionRequest' this function will try to rebuild and resign the transaction
344
+ * @param {ApproveOptions} params
345
+ * @param {boolean} canRecreateTransaction -
346
+ * @param {RequestTracer} reqId id tracer
347
+ */
348
+ async preApprove(params = {}, reqId) {
349
+ // TransactionRequestLite or Multisig tx's must sign before pending approval is approved
350
+ // Re-signed tx is provided to the pending approval api
351
+ if (this.type() === pendingApproval_1.Type.TRANSACTION_REQUEST) {
352
+ /*
353
+ * If this is a request for approving a transaction, depending on whether this user has a private key to the wallet
354
+ * (some admins may not have the spend permission), the transaction could either be rebroadcast as is, or it could
355
+ * be reconstructed. It is preferable to reconstruct a tx in order to adhere to the latest network conditions
356
+ * such as newer unspents, different fees, or a higher sequence id
357
+ */
358
+ if (params.tx) {
359
+ // the approval tx was reconstructed and explicitly specified - pass it through
360
+ return {
361
+ txHex: params.tx,
362
+ };
363
+ }
364
+ // this user may not have spending privileges or a passphrase may not have been passed in
365
+ if (!this.canRecreateTransaction(params)) {
366
+ // If this is a TransactionRequest, then the txRequest already has the unsigned transaction
367
+ if (this._pendingApproval.txRequestId) {
368
+ return undefined;
369
+ }
370
+ // If this is a MultiSig, then we need to fetch the half signed tx to propagate to the approval API
371
+ const transaction = _.get(this.info(), `transactionRequest.coinSpecific.${this.baseCoin.type}`);
372
+ if (!_.isObject(transaction)) {
373
+ throw new Error('there is neither an original transaction object nor can a new one be recreated');
374
+ }
375
+ return transaction;
376
+ }
377
+ if (this._pendingApproval.txRequestId) {
378
+ return await this.recreateAndSignTSSTransaction(params, reqId);
379
+ }
380
+ return await this.recreateAndSignTransaction(params, reqId);
381
+ }
382
+ }
383
+ /**
384
+ * Internal helper function to perform any post-approval actions.
385
+ * If type is 'transactionRequestFull', this will sign the txRequestFull if possible
386
+ * @param params
387
+ * @param reqId
388
+ * @private
389
+ */
390
+ async postApprove(params = {}, reqId) {
391
+ switch (this.type()) {
392
+ case pendingApproval_1.Type.TRANSACTION_REQUEST_FULL:
393
+ if (this._pendingApproval.state === pendingApproval_1.State.APPROVED) {
394
+ // After we approve a lightning transaction, we should proceed with submitting the payment
395
+ if (this.baseCoin.getFamily() === 'lnbtc') {
396
+ (0, assert_1.default)(this._pendingApproval.txRequestId, 'Missing txRequestId');
397
+ // this.populateWallet is called before this so we should be good here
398
+ (0, assert_1.default)(this.wallet?.id(), 'Missing wallet id');
399
+ // todo: add test case for this
400
+ // add new transfer before sending tx
401
+ await this.bitgo
402
+ .post(this.bitgo.url('/wallet/' + this.wallet?.id() + '/txrequests/' + this._pendingApproval.txRequestId + '/transfers', 2))
403
+ .send()
404
+ .result();
405
+ await (0, common_1.sendTxRequest)(this.bitgo, this.wallet?.id(), this._pendingApproval.txRequestId, utils_1.RequestType.tx, reqId);
406
+ }
407
+ else if (this.canRecreateTransaction(params) && this.baseCoin.supportsTss()) {
408
+ await this.recreateAndSignTSSTransaction(params, reqId);
409
+ }
410
+ }
411
+ }
412
+ }
413
+ /**
414
+ * Helper function to ensure that self.wallet is set
415
+ */
416
+ async populateWallet() {
417
+ if (this.wallet) {
418
+ return;
419
+ }
420
+ // TODO(WP-1341): consolidate/simplify this logic
421
+ switch (this.type()) {
422
+ case pendingApproval_1.Type.TRANSACTION_REQUEST:
423
+ const transactionRequest = this.info().transactionRequest;
424
+ if (_.isUndefined(transactionRequest)) {
425
+ throw new Error('missing required object property transactionRequest');
426
+ }
427
+ const updatedWallet = await this.baseCoin.wallets().get({ id: transactionRequest.sourceWallet });
428
+ if (_.isUndefined(updatedWallet)) {
429
+ throw new Error('unexpected - unable to get wallet using sourcewallet');
430
+ }
431
+ this.wallet = updatedWallet;
432
+ if (this.wallet.id() !== transactionRequest.sourceWallet) {
433
+ throw new Error('unexpected source wallet for pending approval');
434
+ }
435
+ break;
436
+ case pendingApproval_1.Type.TRANSACTION_REQUEST_FULL:
437
+ const walletId = this.walletId();
438
+ if (!walletId) {
439
+ throw new Error('Unexpected error, pendingApproval.wallet is expected to be defined!');
440
+ }
441
+ this.wallet = await this.baseCoin.wallets().get({ id: this.walletId() });
442
+ if (!this.wallet) {
443
+ throw new Error('unexpected - unable to get wallet using pendingApproval.wallet');
444
+ }
445
+ break;
446
+ }
447
+ return;
448
+ }
331
449
  }
332
450
  exports.PendingApproval = PendingApproval;
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ0FwcHJvdmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3BlbmRpbmdBcHByb3ZhbC9wZW5kaW5nQXBwcm92YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsMENBQTRCO0FBQzVCLHFEQUF1QztBQUN2Qyw4REFBZ0Q7QUFHaEQsd0RBUTRCO0FBQzVCLG9DQUFtRDtBQUVuRCx1REFBb0Q7QUFFcEQsTUFBYSxlQUFlO0lBTzFCLFlBQVksS0FBZ0IsRUFBRSxRQUFtQixFQUFFLG1CQUF3QyxFQUFFLE1BQWdCO1FBQzNHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxnQkFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsRUFBRTtRQUNBLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQ2hDLE9BQU8sMkJBQVMsQ0FBQyxNQUFNLENBQUM7U0FDekI7YUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7WUFDM0MsT0FBTywyQkFBUyxDQUFDLFVBQVUsQ0FBQztTQUM3QjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO1NBQ2pHO0lBQ0gs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cUI7UUFDckIsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN0RSxRQUFRLEVBQUUsY0FBYztZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsVUFBVSxFQUFFLGdCQUFnQjtTQUM3QixDQUFDLENBQVEsQ0FBQztRQUNYLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7WUFDdkUsUUFBUSxFQUFFLGNBQWM7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFVBQVUsRUFBRSxpQkFBaUI7U0FDOUIsQ0FBQyxDQUFRLENBQUM7UUFFWCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsMEJBQTBCLENBQUMsMkJBQTJCLENBQUMsRUFBRTtZQUN6RSxPQUFPLGlCQUFpQixDQUFDO1NBQzFCO1FBRUQsSUFDRSxPQUFPLDBCQUEwQixDQUFDLDJCQUEyQixLQUFLLFFBQVE7WUFDMUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLDJCQUEyQixDQUFDLEVBQ25FO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsSUFDRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsMkJBQTJCLENBQUM7WUFDckUsMEJBQTBCLENBQUMsMkJBQTJCLEdBQUcseUJBQXlCLENBQUMsMkJBQTJCLEVBQzlHO1lBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1NBQzlFO1FBQ0QsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFuV0QsMENBbVdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgY29tbW9uIGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IElCYXNlQ29pbiB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQge1xuICBBcHByb3ZlT3B0aW9ucyxcbiAgSVBlbmRpbmdBcHByb3ZhbCxcbiAgT3duZXJUeXBlLFxuICBQZW5kaW5nQXBwcm92YWxEYXRhLFxuICBQZW5kaW5nQXBwcm92YWxJbmZvLFxuICBTdGF0ZSxcbiAgVHlwZSxcbn0gZnJvbSAnLi4vcGVuZGluZ0FwcHJvdmFsJztcbmltcG9ydCB7IFJlcXVlc3RUcmFjZXIsIFRzc1V0aWxzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgSVdhbGxldCB9IGZyb20gJy4uL3dhbGxldCc7XG5pbXBvcnQgeyBCdWlsZFBhcmFtcyB9IGZyb20gJy4uL3dhbGxldC9CdWlsZFBhcmFtcyc7XG5cbmV4cG9ydCBjbGFzcyBQZW5kaW5nQXBwcm92YWwgaW1wbGVtZW50cyBJUGVuZGluZ0FwcHJvdmFsIHtcbiAgcHJpdmF0ZSByZWFkb25seSBiaXRnbzogQml0R29CYXNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VDb2luOiBJQmFzZUNvaW47XG4gIHByaXZhdGUgdHNzVXRpbHM6IFRzc1V0aWxzO1xuICBwcml2YXRlIHdhbGxldD86IElXYWxsZXQ7XG4gIHByaXZhdGUgX3BlbmRpbmdBcHByb3ZhbDogUGVuZGluZ0FwcHJvdmFsRGF0YTtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luLCBwZW5kaW5nQXBwcm92YWxEYXRhOiBQZW5kaW5nQXBwcm92YWxEYXRhLCB3YWxsZXQ/OiBJV2FsbGV0KSB7XG4gICAgdGhpcy5iaXRnbyA9IGJpdGdvO1xuICAgIHRoaXMuYmFzZUNvaW4gPSBiYXNlQ29pbjtcbiAgICB0aGlzLndhbGxldCA9IHdhbGxldDtcbiAgICB0aGlzLnRzc1V0aWxzID0gbmV3IFRzc1V0aWxzKHRoaXMuYml0Z28sIHRoaXMuYmFzZUNvaW4sIHdhbGxldCk7XG4gICAgdGhpcy5fcGVuZGluZ0FwcHJvdmFsID0gcGVuZGluZ0FwcHJvdmFsRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlkIGZvciB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3duZXIgdHlwZSAod2FsbGV0IG9yIGVudGVycHJpc2UpXG4gICAqIFBlbmRpbmcgYXBwcm92YWxzIGNhbiBiZSBhcHByb3ZlZCBvciBtb2RpZmllZCBieSBkaWZmZXJlbnQgc2NvcGVzIChkZXBlbmRpbmcgb24gaG93IHRoZXkgd2VyZSBjcmVhdGVkKVxuICAgKiBJZiBhIHBlbmRpbmcgYXBwcm92YWwgaXMgb3duZWQgYnkgYSB3YWxsZXQsIHRoZW4gaXQgY2FuIGJlIGFwcHJvdmVkIGJ5IGFkbWluaXN0cmF0b3JzIG9mIHRoZSB3YWxsZXRcbiAgICogSWYgYSBwZW5kaW5nIGFwcHJvdmFsIGlzIG93bmVkIGJ5IGFuIGVudGVycHJpc2UsIHRoZW4gaXQgY2FuIGJlIGFwcHJvdmVkIGJ5IGFkbWluaXN0cmF0b3JzIG9mIHRoZSBlbnRlcnByaXNlXG4gICAqL1xuICBvd25lclR5cGUoKTogT3duZXJUeXBlIHtcbiAgICBpZiAodGhpcy5fcGVuZGluZ0FwcHJvdmFsLndhbGxldCkge1xuICAgICAgcmV0dXJuIE93bmVyVHlwZS5XQUxMRVQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wZW5kaW5nQXBwcm92YWwuZW50ZXJwcmlzZSkge1xuICAgICAgcmV0dXJuIE93bmVyVHlwZS5FTlRFUlBSSVNFO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgcGVuZGluZyBhcHByb3ZhbCBvd25lcjogbmVpdGhlciB3YWxsZXQgbm9yIGVudGVycHJpc2Ugd2FzIHByZXNlbnQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpZCBvZiB0aGUgd2FsbGV0IHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgd2FsbGV0SWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLndhbGxldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVudGVycHJpc2UgSUQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIGVudGVycHJpc2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuZW50ZXJwcmlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0YXRlIG9mIHRoaXMgUGVuZGluZ0FwcHJvdmFsXG4gICAqL1xuICBzdGF0ZSgpOiBTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5zdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlkIG9mIHRoZSB1c2VyIHRoYXQgcGVyZm9ybWVkIHRoZSBhY3Rpb24gcmVzdWx0aW5nIGluIHRoaXMgUGVuZGluZ0FwcHJvdmFsXG4gICAqL1xuICBjcmVhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5jcmVhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdHlwZSBvZiB0aGUgcGVuZGluZyBhcHByb3ZhbCAod2hhdCBpdCBhcHByb3ZlcylcbiAgICovXG4gIHR5cGUoKTogVHlwZSB7XG4gICAgaWYgKCF0aGlzLl9wZW5kaW5nQXBwcm92YWwuaW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwZW5kaW5nIGFwcHJvdmFsIGluZm8gaXMgbm90IGF2YWlsYWJsZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuaW5mby50eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgaW5mbygpOiBQZW5kaW5nQXBwcm92YWxJbmZvIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmluZm87XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgYXBwcm92YWxzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGlzIFBlbmRpbmdBcHByb3ZhbCB0byBiZSBhcHByb3ZlZC5cbiAgICogRGVmYXVsdHMgdG8gMSBpZiBhcHByb3ZhbHNSZXF1aXJlZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBvYmplY3RcbiAgICovXG4gIGFwcHJvdmFsc1JlcXVpcmVkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5hcHByb3ZhbHNSZXF1aXJlZCB8fCAxO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgdXJsIGZvciB0aGlzIFBlbmRpbmdBcHByb3ZhbCBmb3IgbWFraW5nIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIuXG4gICAqIEBwYXJhbSBleHRyYVxuICAgKi9cbiAgdXJsKGV4dHJhID0gJycpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VDb2luLnVybCgnL3BlbmRpbmdhcHByb3ZhbHMvJyArIHRoaXMuaWQoKSArIGV4dHJhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZldGNoZXMgdGhpcyBQZW5kaW5nQXBwcm92YWwgZnJvbSB0aGUgc2VydmVyIGFuZCByZXR1cm5zIGl0LlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBtdXRhdGVzIHRoZSBQZW5kaW5nQXBwcm92YWwgb2JqZWN0IGluIHBsYWNlLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBnZXQocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gPSB7fSk6IFByb21pc2U8UGVuZGluZ0FwcHJvdmFsPiB7XG4gICAgdGhpcy5fcGVuZGluZ0FwcHJvdmFsID0gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy51cmwoKSkucmVzdWx0KCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGF0IHNlbGYud2FsbGV0IGlzIHNldFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwb3B1bGF0ZVdhbGxldCgpOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdCA9IHRoaXMuaW5mbygpLnRyYW5zYWN0aW9uUmVxdWVzdDtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0cmFuc2FjdGlvblJlcXVlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IHByb3BlcnR5IHRyYW5zYWN0aW9uUmVxdWVzdCcpO1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMud2FsbGV0KSkge1xuICAgICAgY29uc3QgdXBkYXRlZFdhbGxldDogSVdhbGxldCA9IGF3YWl0IHRoaXMuYmFzZUNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB0cmFuc2FjdGlvblJlcXVlc3Quc291cmNlV2FsbGV0IH0pO1xuXG4gICAgICBpZiAoXy5pc1VuZGVmaW5lZCh1cGRhdGVkV2FsbGV0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgLSB1bmFibGUgdG8gZ2V0IHdhbGxldCB1c2luZyBzb3VyY2V3YWxsZXQnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy53YWxsZXQgPSB1cGRhdGVkV2FsbGV0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLndhbGxldC5pZCgpICE9PSB0cmFuc2FjdGlvblJlcXVlc3Quc291cmNlV2FsbGV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgc291cmNlIHdhbGxldCBmb3IgcGVuZGluZyBhcHByb3ZhbCcpO1xuICAgIH1cblxuICAgIC8vIG90aGVyd2lzZSByZXR1cm5zIHVuZGVmaW5lZFxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgUGVuZGluZ0FwcHJvdmFsIHRvIGFuIGFwcHJvdmVkIHN0YXRlXG4gICAqL1xuICBhc3luYyBhcHByb3ZlKHBhcmFtczogQXBwcm92ZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFsnd2FsbGV0UGFzc3BocmFzZScsICdvdHAnXSk7XG5cbiAgICBsZXQgY2FuUmVjcmVhdGVUcmFuc2FjdGlvbiA9IHRydWU7XG4gICAgcGFyYW1zLnByZXZpZXdQZW5kaW5nVHhzID0gdHJ1ZTtcbiAgICBwYXJhbXMucGVuZGluZ0FwcHJvdmFsSWQgPSB0aGlzLmlkKCk7XG4gICAgLypcbiAgICAgKiBDb2xkIHdhbGxldHMgY2Fubm90IHJlY3JlYXRlIHRyYW5zYWN0aW9ucyBpZiB0aGUgb25seSB0aGluZyBwcm92aWRlZCBpcyB0aGUgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICAgKlxuICAgICAqIFRoZSB0cmFuc2FjdGlvbiBjYW4gYmUgcmVjcmVhdGVkIGlmIGVpdGhlclxuICAgICAqIOKAkyB0aGVyZSBpcyBhbiB4cHJ2XG4gICAgICog4oCTIHRoZXJlIGlzIGEgd2FsbGV0UGFzc3BocmFzZSBhbmQgdGhlIHdhbGxldCBpcyBub3QgY29sZCAoYmVjYXVzZSBpZiBpdCdzIGNvbGQsIHRoZSBwYXNzcGhyYXNlIGlzIG9mIGxpdHRsZSB1c2UpXG4gICAgICpcbiAgICAgKiBUaGVyZWZvcmUsIGlmIG5laXRoZXIgb2YgdGhlc2UgaXMgdHJ1ZSwgdGhlIHRyYW5zYWN0aW9uIGNhbm5vdCBiZSByZWNyZWF0ZWQsIHdoaWNoIGlzIHJlZmxlY3RlZCBpbiB0aGUgaWZcbiAgICAgKiBzdGF0ZW1lbnQgYmVsb3cuXG4gICAgICovXG4gICAgY29uc3QgaXNDb2xkV2FsbGV0ID0gISFfLmdldCh0aGlzLndhbGxldCwgJ193YWxsZXQuaXNDb2xkJyk7XG4gICAgY29uc3QgaXNPRkNXYWxsZXQgPSB0aGlzLmJhc2VDb2luLmdldEZhbWlseSgpID09PSAnb2ZjJzsgLy8gT2ZmLWNoYWluIHRyYW5zYWN0aW9ucyBkb24ndCBuZWVkIHRvIGJlIHJlYnVpbHRcbiAgICBpZiAoIXBhcmFtcy54cHJ2ICYmICEocGFyYW1zLndhbGxldFBhc3NwaHJhc2UgJiYgIWlzQ29sZFdhbGxldCAmJiAhaXNPRkNXYWxsZXQpKSB7XG4gICAgICBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHJlY2lwaWVudHMsIHRoZW4gdGhlIHRyYW5zYWN0aW9uIGNhbm5vdCBiZSByZWNyZWF0ZWRcbiAgICBjb25zdCByZWNpcGllbnRzID0gdGhpcy5pbmZvKCk/LnRyYW5zYWN0aW9uUmVxdWVzdD8uYnVpbGRQYXJhbXM/LnJlY2lwaWVudHMgfHwgW107XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuaW5mbygpPy50cmFuc2FjdGlvblJlcXVlc3Q/LmJ1aWxkUGFyYW1zPy50eXBlO1xuXG4gICAgLy8gV2Ugb25seSB3YW50IHRvIG5vdCByZWNyZWF0ZSB0cmFuc2FjdGlvbnMgd2l0aCBubyByZWNpcGllbnRzIGlmIGl0IGlzIGEgVVRYTyBjb2luLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKHV0eG9saWIuaXNWYWxpZE5ldHdvcmsoKHRoaXMuYmFzZUNvaW4gYXMgYW55KS5uZXR3b3JrKSAmJiByZWNpcGllbnRzLmxlbmd0aCA9PT0gMCAmJiB0eXBlICE9PSAnY29uc29saWRhdGUnKSB7XG4gICAgICBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuXG4gICAgLypcbiAgICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIHdoaWNoIGlzIGJlaW5nIGFwcHJvdmVkXG4gICAgICovXG4gICAgY29uc3QgZ2V0QXBwcm92YWxUcmFuc2FjdGlvbiA9IGFzeW5jICgpOiBQcm9taXNlPHsgdHhIZXg6IHN0cmluZyB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICBpZiAodGhpcy50eXBlKCkgPT09ICd0cmFuc2FjdGlvblJlcXVlc3QnKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIElmIHRoaXMgaXMgYSByZXF1ZXN0IGZvciBhcHByb3ZpbmcgYSB0cmFuc2FjdGlvbiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyB1c2VyIGhhcyBhIHByaXZhdGUga2V5IHRvIHRoZSB3YWxsZXRcbiAgICAgICAgICogKHNvbWUgYWRtaW5zIG1heSBub3QgaGF2ZSB0aGUgc3BlbmQgcGVybWlzc2lvbiksIHRoZSB0cmFuc2FjdGlvbiBjb3VsZCBlaXRoZXIgYmUgcmVicm9hZGNhc3QgYXMgaXMsIG9yIGl0IGNvdWxkXG4gICAgICAgICAqIGJlIHJlY29uc3RydWN0ZWQuIEl0IGlzIHByZWZlcmFibGUgdG8gcmVjb25zdHJ1Y3QgYSB0eCBpbiBvcmRlciB0byBhZGhlcmUgdG8gdGhlIGxhdGVzdCBuZXR3b3JrIGNvbmRpdGlvbnNcbiAgICAgICAgICogc3VjaCBhcyBuZXdlciB1bnNwZW50cywgZGlmZmVyZW50IGZlZXMsIG9yIGEgaGlnaGVyIHNlcXVlbmNlIGlkXG4gICAgICAgICAqL1xuICAgICAgICBpZiAocGFyYW1zLnR4KSB7XG4gICAgICAgICAgLy8gdGhlIGFwcHJvdmFsIHR4IHdhcyByZWNvbnN0cnVjdGVkIGFuZCBleHBsaWNpdGx5IHNwZWNpZmllZCAtIHBhc3MgaXQgdGhyb3VnaFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eEhleDogcGFyYW1zLnR4LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IF8uZ2V0KHRoaXMuaW5mbygpLCBgdHJhbnNhY3Rpb25SZXF1ZXN0LmNvaW5TcGVjaWZpYy4ke3RoaXMuYmFzZUNvaW4udHlwZX1gKSBhcyB7XG4gICAgICAgICAgdHhIZXg6IHN0cmluZztcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB0aGlzIHVzZXIgbWF5IG5vdCBoYXZlIHNwZW5kaW5nIHByaXZpbGVnZXMgb3IgYSBwYXNzcGhyYXNlIG1heSBub3QgaGF2ZSBiZWVuIHBhc3NlZCBpblxuICAgICAgICBpZiAoIWNhblJlY3JlYXRlVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICBpZiAoIV8uaXNPYmplY3QodHJhbnNhY3Rpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoZXJlIGlzIG5laXRoZXIgYW4gb3JpZ2luYWwgdHJhbnNhY3Rpb24gb2JqZWN0IG5vciBjYW4gYSBuZXcgb25lIGJlIHJlY3JlYXRlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuICAgICAgICBhd2FpdCB0aGlzLnBvcHVsYXRlV2FsbGV0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdBcHByb3ZhbC50eFJlcXVlc3RJZCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uKHBhcmFtcywgcmVxSWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHRvIHByZXBhcmUgdGhlIGFwcHJvdmFsIHBheWxvYWQgYW5kIHNlbmQgaXQgdG8gYml0Z29cbiAgICAgKi9cbiAgICBjb25zdCBzZW5kQXBwcm92YWwgPSAodHJhbnNhY3Rpb246IHsgdHhIZXg6IHN0cmluZzsgaGFsZlNpZ25lZD86IHN0cmluZyB9KTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIGNvbnN0IGFwcHJvdmFsUGFyYW1zOiBhbnkgPSB7IHN0YXRlOiAnYXBwcm92ZWQnLCBvdHA6IHBhcmFtcy5vdHAgfTtcbiAgICAgIGlmICh0cmFuc2FjdGlvbikge1xuICAgICAgICAvLyBpZiB0aGUgdHJhbnNhY3Rpb24gYWxyZWFkeSBoYXMgYSBoYWxmIHNpZ25lZCBwcm9wZXJ0eSwgd2UgdGFrZSB0aGF0IGRpcmVjdGx5XG4gICAgICAgIGFwcHJvdmFsUGFyYW1zLmhhbGZTaWduZWQgPSB0cmFuc2FjdGlvbi5oYWxmU2lnbmVkIHx8IHRyYW5zYWN0aW9uO1xuICAgICAgfVxuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcbiAgICAgIHJldHVybiB0aGlzLmJpdGdvLnB1dCh0aGlzLnVybCgpKS5zZW5kKGFwcHJvdmFsUGFyYW1zKS5yZXN1bHQoKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFwcHJvdmFsVHJhbnNhY3Rpb24gPSAoYXdhaXQgZ2V0QXBwcm92YWxUcmFuc2FjdGlvbigpKSBhcyBhbnk7XG4gICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuICAgICAgcmV0dXJuIGF3YWl0IHNlbmRBcHByb3ZhbChhcHByb3ZhbFRyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uICYmXG4gICAgICAgIChlLm1lc3NhZ2UuaW5kZXhPZignY291bGQgbm90IGZpbmQgdW5zcGVudCBvdXRwdXQgZm9yIGlucHV0JykgIT09IC0xIHx8XG4gICAgICAgICAgZS5tZXNzYWdlLmluZGV4T2YoJ3RyYW5zYWN0aW9uIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uIGluIHRoZSBzZW5kIHF1ZXVlJykgIT09IC0xKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zcGVudHMgZXhwaXJlZCwgd2FsbGV0IHBhc3NwaHJhc2Ugb3IgeHBydiByZXF1aXJlZCB0byByZWNyZWF0ZSB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIFBlbmRpbmdBcHByb3ZhbCB0byBhIHJlamVjdGVkIHN0YXRlXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIHJlamVjdChwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPiA9IHt9KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnby5wdXQodGhpcy51cmwoKSkuc2VuZCh7IHN0YXRlOiAncmVqZWN0ZWQnIH0pLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsaWFzIGZvciBQZW5kaW5nQXBwcm92YWwucmVqZWN0KClcbiAgICpcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgY2FuY2VsKHBhcmFtczogUmVjb3JkPHN0cmluZywgbmV2ZXI+ID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJlamVjdChwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlIGFuZCBzaWduIFRTUyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge0FwcHJvdmVPcHRpb25zfSBwYXJhbXMgbmVlZGVkIHRvIGdldCB0eHMgYW5kIHVzZSB0aGUgd2FsbGV0UGFzc3BocmFzZSB0byB0c3Mgc2lnblxuICAgKiBAcGFyYW0ge1JlcXVlc3RUcmFjZXJ9IHJlcUlkIGlkIHRyYWNlci5cbiAgICovXG4gIGFzeW5jIHJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uKHBhcmFtczogQXBwcm92ZU9wdGlvbnMsIHJlcUlkOiBSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTx7IHR4SGV4OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHsgd2FsbGV0UGFzc3BocmFzZSB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHR4UmVxdWVzdElkID0gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLnR4UmVxdWVzdElkO1xuXG4gICAgaWYgKCF0aGlzLndhbGxldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXYWxsZXQgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKCF3YWxsZXRQYXNzcGhyYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dhbGxldFBhc3NwaHJhc2Ugbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0eFJlcXVlc3RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eFJlcXVlc3RJZCBub3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRQcnYgPSBhd2FpdCB0aGlzLndhbGxldC5nZXRQcnYoeyB3YWxsZXRQYXNzcGhyYXNlIH0pO1xuICAgIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IHRoaXMudHNzVXRpbHMucmVjcmVhdGVUeFJlcXVlc3QodHhSZXF1ZXN0SWQsIGRlY3J5cHRlZFBydiwgcmVxSWQpO1xuICAgIHJldHVybiB7XG4gICAgICB0eEhleDogdHhSZXF1ZXN0LnVuc2lnbmVkVHhzWzBdLnNlcmlhbGl6ZWRUeEhleCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlIGEgdHJhbnNhY3Rpb24gZm9yIGEgcGVuZGluZyBhcHByb3ZhbCB0byByZXNwb25kIHRvIHVwZGF0ZWQgbmV0d29yayBjb25kaXRpb25zXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIHJlY3JlYXRlQW5kU2lnblRyYW5zYWN0aW9uKHBhcmFtczogYW55ID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIHRoaXMgbWV0aG9kIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBleGlzdGluZyB0cmFuc2FjdGlvbiByZXF1ZXN0c1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdCA9IHRoaXMuaW5mbygpLnRyYW5zYWN0aW9uUmVxdWVzdDtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0cmFuc2FjdGlvblJlcXVlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCByZWNyZWF0ZSB0cmFuc2FjdGlvbiB3aXRob3V0IHRyYW5zYWN0aW9uIHJlcXVlc3QnKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLndhbGxldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IHJlY3JlYXRlIHRyYW5zYWN0aW9uIHdpdGhvdXQgd2FsbGV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxQcmVidWlsZCA9IHRyYW5zYWN0aW9uUmVxdWVzdC5jb2luU3BlY2lmaWNbdGhpcy5iYXNlQ29pbi50eXBlXTtcblxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0cmFuc2FjdGlvblJlcXVlc3QucmVjaXBpZW50cztcbiAgICBjb25zdCBwcmVidWlsZFBhcmFtcyA9IF8uZXh0ZW5kKHt9LCBwYXJhbXMsIHsgcmVjaXBpZW50czogcmVjaXBpZW50cyB9LCB0cmFuc2FjdGlvblJlcXVlc3QuYnVpbGRQYXJhbXMpO1xuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKG9yaWdpbmFsUHJlYnVpbGQuaG9wVHJhbnNhY3Rpb24pKSB7XG4gICAgICBwcmVidWlsZFBhcmFtcy5ob3AgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0cmFuc2FjdGlvblJlcXVlc3QuYnVpbGRQYXJhbXMgJiYgdHJhbnNhY3Rpb25SZXF1ZXN0LmJ1aWxkUGFyYW1zLnR5cGUgPT09ICdjb25zb2xpZGF0ZScpIHtcbiAgICAgIC8vIGNvbnNvbGlkYXRlIHRhZyBpcyBpbiB0aGUgYnVpbGQgcGFyYW1zIC0gdGhpcyBpcyBhIGNvbnNvbGlkYXRpb24gdHJhbnNhY3Rpb24sIHNvXG4gICAgICAvLyBpdCBuZWVkcyB0byBiZSByZWJ1aWx0IHVzaW5nIHRoZSBzcGVjaWFsIGNvbnNvbGlkYXRpb24gYnVpbGQgcm91dGVcbiAgICAgIHByZWJ1aWxkUGFyYW1zLnByZWJ1aWxkVHggPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAgIC5wb3N0KHRoaXMud2FsbGV0LnVybChgL2NvbnNvbGlkYXRlVW5zcGVudHNgKSlcbiAgICAgICAgLnNlbmQoQnVpbGRQYXJhbXMuZW5jb2RlKHByZWJ1aWxkUGFyYW1zKSlcbiAgICAgICAgLnJlc3VsdCgpO1xuICAgICAgZGVsZXRlIHByZWJ1aWxkUGFyYW1zLnJlY2lwaWVudHM7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLndhbGxldC5wcmVidWlsZEFuZFNpZ25UcmFuc2FjdGlvbihwcmVidWlsZFBhcmFtcyk7XG4gICAgLy8gY29tcGFyZSBQQVlHbyBmZWVzXG4gICAgY29uc3Qgb3JpZ2luYWxQYXJzZWRUcmFuc2FjdGlvbiA9IChhd2FpdCB0aGlzLmJhc2VDb2luLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHByZWJ1aWxkUGFyYW1zLFxuICAgICAgd2FsbGV0OiB0aGlzLndhbGxldCxcbiAgICAgIHR4UHJlYnVpbGQ6IG9yaWdpbmFsUHJlYnVpbGQsXG4gICAgfSkpIGFzIGFueTtcbiAgICBjb25zdCByZWNyZWF0ZWRQYXJzZWRUcmFuc2FjdGlvbiA9IChhd2FpdCB0aGlzLmJhc2VDb2luLnBhcnNlVHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHByZWJ1aWxkUGFyYW1zLFxuICAgICAgd2FsbGV0OiB0aGlzLndhbGxldCxcbiAgICAgIHR4UHJlYnVpbGQ6IHNpZ25lZFRyYW5zYWN0aW9uLFxuICAgIH0pKSBhcyBhbnk7XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChyZWNyZWF0ZWRQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpKSB7XG4gICAgICByZXR1cm4gc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHJlY3JlYXRlZFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCAhPT0gJ2JpZ2ludCcgJiZcbiAgICAgICFfLmlzRmluaXRlKHJlY3JlYXRlZFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgYW1vdW50IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICFfLmlzVW5kZWZpbmVkKG9yaWdpbmFsUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KSAmJlxuICAgICAgcmVjcmVhdGVkUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50ID4gb3JpZ2luYWxQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncmVjcmVhdGVkIHRyYW5zYWN0aW9uIGlzIHVzaW5nIGEgaGlnaGVyIHBheS1hcy15b3UtZ28tZmVlJyk7XG4gICAgfVxuICAgIHJldHVybiBzaWduZWRUcmFuc2FjdGlvbjtcbiAgfVxufVxuIl19
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZ0FwcHJvdmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3BlbmRpbmdBcHByb3ZhbC9wZW5kaW5nQXBwcm92YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCwwQ0FBNEI7QUFDNUIsOERBQWdEO0FBR2hELHdEQVE0QjtBQUM1QixvQ0FBc0Q7QUFFdEQsdURBQW9EO0FBR3BELDREQUFpRTtBQUNqRSw4Q0FBaUU7QUFHakUsMENBQThDO0FBQzlDLG9EQUE0QjtBQWU1QixNQUFhLGVBQWU7SUFPMUIsWUFBWSxLQUFnQixFQUFFLFFBQW1CLEVBQUUsbUJBQXdDLEVBQUUsTUFBZ0I7UUFDM0csSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHVCQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGtCQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO1lB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QyxzREFBc0QsQ0FBQyxDQUFDO2dCQUMxRSxDQUFDO2dCQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO2dCQUU1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxzQkFBSSxDQUFDLHdCQUF3QjtnQkFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO2dCQUN6RixDQUFDO2dCQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7Z0JBQ3BGLENBQUM7Z0JBQ0QsTUFBTTtRQUNWLENBQUM7UUFDRCxPQUFPO0lBQ1QsQ0FBQztDQUNGO0FBbmRELDBDQW1kQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgSUJhc2VDb2luIH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7XG4gIEFwcHJvdmVPcHRpb25zLFxuICBJUGVuZGluZ0FwcHJvdmFsLFxuICBPd25lclR5cGUsXG4gIFBlbmRpbmdBcHByb3ZhbERhdGEsXG4gIFBlbmRpbmdBcHByb3ZhbEluZm8sXG4gIFN0YXRlLFxuICBUeXBlLFxufSBmcm9tICcuLi9wZW5kaW5nQXBwcm92YWwnO1xuaW1wb3J0IHsgUmVxdWVzdFRyYWNlciwgUmVxdWVzdFR5cGUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBJV2FsbGV0IH0gZnJvbSAnLi4vd2FsbGV0JztcbmltcG9ydCB7IEJ1aWxkUGFyYW1zIH0gZnJvbSAnLi4vd2FsbGV0L0J1aWxkUGFyYW1zJztcbmltcG9ydCB7IElSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vLi4vYXBpJztcbmltcG9ydCBCYXNlVHNzVXRpbHMgZnJvbSAnLi4vdXRpbHMvdHNzL2Jhc2VUU1NVdGlscyc7XG5pbXBvcnQgRWRkc2FVdGlscywgeyBFZGRzYU1QQ3YyVXRpbHMgfSBmcm9tICcuLi91dGlscy90c3MvZWRkc2EnO1xuaW1wb3J0IHsgRWNkc2FNUEN2MlV0aWxzLCBFY2RzYVV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdHNzL2VjZHNhJztcbmltcG9ydCB7IEtleVNoYXJlIGFzIEVjZHNhS2V5U2hhcmUgfSBmcm9tICcuLi91dGlscy90c3MvZWNkc2EvdHlwZXMnO1xuaW1wb3J0IHsgS2V5U2hhcmUgYXMgRWRkc2FLZXlTaGFyZSB9IGZyb20gJy4uL3V0aWxzL3Rzcy9lZGRzYS90eXBlcyc7XG5pbXBvcnQgeyBzZW5kVHhSZXF1ZXN0IH0gZnJvbSAnLi4vdHNzL2NvbW1vbic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbnR5cGUgUHJlQXBwcm92ZVJlc3VsdCA9IHtcbiAgdHhIZXg6IHN0cmluZztcbiAgaGFsZlNpZ25lZD86IHN0cmluZztcbn07XG5cbi8vIFRPRE8oV0NOLTU0MSk6IGFkZCBvcHRpb25hbCBhdHRlc3RhdGlvbiBwYXNzLXRocm91Z2ggZm9yIFBVVCAvcGVuZGluZ2FwcHJvdmFscy86aWQgKGRlZmVycmVkXG4vLyB1bnRpbCBtdWx0aXNpZyBhdHRlc3RhdGlvbiwgV0NOLTUzOSwgaXMgdmVyaWZpZWQgZW5kLXRvLWVuZCBvbiBzdGFnaW5nKS5cbnR5cGUgQXBwcm92ZVBlbmRpbmdBcHByb3ZhbFJlcXVlc3RCb2R5ID0ge1xuICBzdGF0ZTogJ2FwcHJvdmVkJztcbiAgb3RwOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhbGZTaWduZWQ/OiBzdHJpbmcgfCBPbWl0PFByZUFwcHJvdmVSZXN1bHQsICdoYWxmU2lnbmVkJz47XG59O1xuXG5leHBvcnQgY2xhc3MgUGVuZGluZ0FwcHJvdmFsIGltcGxlbWVudHMgSVBlbmRpbmdBcHByb3ZhbCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYml0Z286IEJpdEdvQmFzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlQ29pbjogSUJhc2VDb2luO1xuICBwcml2YXRlIHRzc1V0aWxzPzogQmFzZVRzc1V0aWxzPEVjZHNhS2V5U2hhcmUgfCBFZGRzYUtleVNoYXJlPjtcbiAgcHJpdmF0ZSB3YWxsZXQ/OiBJV2FsbGV0O1xuICBwcml2YXRlIF9wZW5kaW5nQXBwcm92YWw6IFBlbmRpbmdBcHByb3ZhbERhdGE7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgYmFzZUNvaW46IElCYXNlQ29pbiwgcGVuZGluZ0FwcHJvdmFsRGF0YTogUGVuZGluZ0FwcHJvdmFsRGF0YSwgd2FsbGV0PzogSVdhbGxldCkge1xuICAgIHRoaXMuYml0Z28gPSBiaXRnbztcbiAgICB0aGlzLmJhc2VDb2luID0gYmFzZUNvaW47XG4gICAgdGhpcy53YWxsZXQgPSB3YWxsZXQ7XG5cbiAgICBpZiAodGhpcy5iYXNlQ29pbi5zdXBwb3J0c1RzcygpKSB7XG4gICAgICBpZiAodGhpcy5iYXNlQ29pbi5nZXRNUENBbGdvcml0aG0oKSA9PT0gJ2VjZHNhJykge1xuICAgICAgICBpZiAodGhpcy53YWxsZXQ/Lm11bHRpc2lnVHlwZVZlcnNpb24oKSA9PT0gJ01QQ3YyJykge1xuICAgICAgICAgIHRoaXMudHNzVXRpbHMgPSBuZXcgRWNkc2FNUEN2MlV0aWxzKHRoaXMuYml0Z28sIHRoaXMuYmFzZUNvaW4sIHdhbGxldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50c3NVdGlscyA9IG5ldyBFY2RzYVV0aWxzKHRoaXMuYml0Z28sIHRoaXMuYmFzZUNvaW4sIHdhbGxldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLndhbGxldD8ubXVsdGlzaWdUeXBlVmVyc2lvbigpID09PSAnTVBDdjInKSB7XG4gICAgICAgICAgdGhpcy50c3NVdGlscyA9IG5ldyBFZGRzYU1QQ3YyVXRpbHModGhpcy5iaXRnbywgdGhpcy5iYXNlQ29pbiwgd2FsbGV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRzc1V0aWxzID0gbmV3IEVkZHNhVXRpbHModGhpcy5iaXRnbywgdGhpcy5iYXNlQ29pbiwgd2FsbGV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3BlbmRpbmdBcHByb3ZhbCA9IHBlbmRpbmdBcHByb3ZhbERhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpZCBmb3IgdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5pZDtcbiAgfVxuXG4gIHRvSlNPTigpOiBQZW5kaW5nQXBwcm92YWxEYXRhIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3duZXIgdHlwZSAod2FsbGV0IG9yIGVudGVycHJpc2UpXG4gICAqIFBlbmRpbmcgYXBwcm92YWxzIGNhbiBiZSBhcHByb3ZlZCBvciBtb2RpZmllZCBieSBkaWZmZXJlbnQgc2NvcGVzIChkZXBlbmRpbmcgb24gaG93IHRoZXkgd2VyZSBjcmVhdGVkKVxuICAgKiBJZiBhIHBlbmRpbmcgYXBwcm92YWwgaXMgb3duZWQgYnkgYSB3YWxsZXQsIHRoZW4gaXQgY2FuIGJlIGFwcHJvdmVkIGJ5IGFkbWluaXN0cmF0b3JzIG9mIHRoZSB3YWxsZXRcbiAgICogSWYgYSBwZW5kaW5nIGFwcHJvdmFsIGlzIG93bmVkIGJ5IGFuIGVudGVycHJpc2UsIHRoZW4gaXQgY2FuIGJlIGFwcHJvdmVkIGJ5IGFkbWluaXN0cmF0b3JzIG9mIHRoZSBlbnRlcnByaXNlXG4gICAqL1xuICBvd25lclR5cGUoKTogT3duZXJUeXBlIHtcbiAgICBpZiAodGhpcy5fcGVuZGluZ0FwcHJvdmFsLndhbGxldCkge1xuICAgICAgcmV0dXJuIE93bmVyVHlwZS5XQUxMRVQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wZW5kaW5nQXBwcm92YWwuZW50ZXJwcmlzZSkge1xuICAgICAgcmV0dXJuIE93bmVyVHlwZS5FTlRFUlBSSVNFO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgcGVuZGluZyBhcHByb3ZhbCBvd25lcjogbmVpdGhlciB3YWxsZXQgbm9yIGVudGVycHJpc2Ugd2FzIHByZXNlbnQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpZCBvZiB0aGUgd2FsbGV0IHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgd2FsbGV0SWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLndhbGxldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVudGVycHJpc2UgSUQgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBQZW5kaW5nQXBwcm92YWxcbiAgICovXG4gIGVudGVycHJpc2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuZW50ZXJwcmlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0YXRlIG9mIHRoaXMgUGVuZGluZ0FwcHJvdmFsXG4gICAqL1xuICBzdGF0ZSgpOiBTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5zdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlkIG9mIHRoZSB1c2VyIHRoYXQgcGVyZm9ybWVkIHRoZSBhY3Rpb24gcmVzdWx0aW5nIGluIHRoaXMgUGVuZGluZ0FwcHJvdmFsXG4gICAqL1xuICBjcmVhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5jcmVhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdHlwZSBvZiB0aGUgcGVuZGluZyBhcHByb3ZhbCAod2hhdCBpdCBhcHByb3ZlcylcbiAgICovXG4gIHR5cGUoKTogVHlwZSB7XG4gICAgaWYgKCF0aGlzLl9wZW5kaW5nQXBwcm92YWwuaW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwZW5kaW5nIGFwcHJvdmFsIGluZm8gaXMgbm90IGF2YWlsYWJsZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQXBwcm92YWwuaW5mby50eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIFBlbmRpbmdBcHByb3ZhbFxuICAgKi9cbiAgaW5mbygpOiBQZW5kaW5nQXBwcm92YWxJbmZvIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FwcHJvdmFsLmluZm87XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgYXBwcm92YWxzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGlzIFBlbmRpbmdBcHByb3ZhbCB0byBiZSBhcHByb3ZlZC5cbiAgICogRGVmYXVsdHMgdG8gMSBpZiBhcHByb3ZhbHNSZXF1aXJlZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBvYmplY3RcbiAgICovXG4gIGFwcHJvdmFsc1JlcXVpcmVkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbC5hcHByb3ZhbHNSZXF1aXJlZCB8fCAxO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgdXJsIGZvciB0aGlzIFBlbmRpbmdBcHByb3ZhbCBmb3IgbWFraW5nIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIuXG4gICAqIEBwYXJhbSBleHRyYVxuICAgKi9cbiAgdXJsKGV4dHJhID0gJycpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VDb2luLnVybCgnL3BlbmRpbmdhcHByb3ZhbHMvJyArIHRoaXMuaWQoKSArIGV4dHJhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZldGNoZXMgdGhpcyBQZW5kaW5nQXBwcm92YWwgZnJvbSB0aGUgc2VydmVyIGFuZCByZXR1cm5zIGl0LlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBtdXRhdGVzIHRoZSBQZW5kaW5nQXBwcm92YWwgb2JqZWN0IGluIHBsYWNlLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBnZXQocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gPSB7fSk6IFByb21pc2U8UGVuZGluZ0FwcHJvdmFsPiB7XG4gICAgdGhpcy5fcGVuZGluZ0FwcHJvdmFsID0gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy51cmwoKSkucmVzdWx0KCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIFBlbmRpbmdBcHByb3ZhbCB0byBhbiBhcHByb3ZlZCBzdGF0ZVxuICAgKi9cbiAgYXN5bmMgYXBwcm92ZShwYXJhbXM6IEFwcHJvdmVPcHRpb25zID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIHBhcmFtcy5wcmV2aWV3UGVuZGluZ1R4cyA9IHRydWU7XG4gICAgcGFyYW1zLnBlbmRpbmdBcHByb3ZhbElkID0gdGhpcy5pZCgpO1xuICAgIGNvbnN0IGNhblJlY3JlYXRlVHJhbnNhY3Rpb24gPSB0aGlzLmNhblJlY3JlYXRlVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcbiAgICBhd2FpdCB0aGlzLnBvcHVsYXRlV2FsbGV0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBhd2FpdCB0aGlzLnByZUFwcHJvdmUocGFyYW1zLCByZXFJZCk7XG5cbiAgICAgIGNvbnN0IGFwcHJvdmFsUGFyYW1zOiBBcHByb3ZlUGVuZGluZ0FwcHJvdmFsUmVxdWVzdEJvZHkgPSB7IHN0YXRlOiAnYXBwcm92ZWQnLCBvdHA6IHBhcmFtcy5vdHAgfTtcbiAgICAgIGlmICh0cmFuc2FjdGlvbikge1xuICAgICAgICAvLyBpZiB0aGUgdHJhbnNhY3Rpb24gYWxyZWFkeSBoYXMgYSBoYWxmIHNpZ25lZCBwcm9wZXJ0eSwgd2UgdGFrZSB0aGF0IGRpcmVjdGx5XG4gICAgICAgIGFwcHJvdmFsUGFyYW1zLmhhbGZTaWduZWQgPSB0cmFuc2FjdGlvbi5oYWxmU2lnbmVkIHx8IHRyYW5zYWN0aW9uO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvLnB1dCh0aGlzLnVybCgpKS5zZW5kKGFwcHJvdmFsUGFyYW1zKS5yZXN1bHQoKTtcblxuICAgICAgLy8gaWYgdGhlIHJlc3BvbnNlIGNvbWVzIHdpdGggYW4gZXJyb3IsIG1lYW5zIHRoYXQgdGhlIHRyYW5zYWN0aW9uIHRyaWdnZXJlZCBhbm90aGVyIGNvbmRpdGlvblxuICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIHJlc3BvbnNlLmhhc093blByb3BlcnR5KCdwZW5kaW5nQXBwcm92YWwnKSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3BlbmRpbmdBcHByb3ZhbCA9IHJlc3BvbnNlO1xuICAgICAgYXdhaXQgdGhpcy5wb3N0QXBwcm92ZShwYXJhbXMsIHJlcUlkKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdBcHByb3ZhbDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uICYmXG4gICAgICAgIChlLm1lc3NhZ2UuaW5kZXhPZignY291bGQgbm90IGZpbmQgdW5zcGVudCBvdXRwdXQgZm9yIGlucHV0JykgIT09IC0xIHx8XG4gICAgICAgICAgZS5tZXNzYWdlLmluZGV4T2YoJ3RyYW5zYWN0aW9uIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uIGluIHRoZSBzZW5kIHF1ZXVlJykgIT09IC0xKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zcGVudHMgZXhwaXJlZCwgd2FsbGV0IHBhc3NwaHJhc2Ugb3IgeHBydiByZXF1aXJlZCB0byByZWNyZWF0ZSB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIFBlbmRpbmdBcHByb3ZhbCB0byBhIHJlamVjdGVkIHN0YXRlXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIHJlamVjdChwYXJhbXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPiA9IHt9KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnby5wdXQodGhpcy51cmwoKSkuc2VuZCh7IHN0YXRlOiAncmVqZWN0ZWQnIH0pLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsaWFzIGZvciBQZW5kaW5nQXBwcm92YWwucmVqZWN0KClcbiAgICpcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgY2FuY2VsKHBhcmFtczogUmVjb3JkPHN0cmluZywgbmV2ZXI+ID0ge30pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJlamVjdChwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlIGFuZCBzaWduIFRTUyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge0FwcHJvdmVPcHRpb25zfSBwYXJhbXMgbmVlZGVkIHRvIGdldCB0eHMgYW5kIHVzZSB0aGUgd2FsbGV0UGFzc3BocmFzZSB0byB0c3Mgc2lnblxuICAgKiBAcGFyYW0ge1JlcXVlc3RUcmFjZXJ9IHJlcUlkIGlkIHRyYWNlci5cbiAgICovXG4gIGFzeW5jIHJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uKHBhcmFtczogQXBwcm92ZU9wdGlvbnMsIHJlcUlkOiBJUmVxdWVzdFRyYWNlcik6IFByb21pc2U8eyB0eEhleDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCB7IHdhbGxldFBhc3NwaHJhc2UgfSA9IHBhcmFtcztcbiAgICBjb25zdCB0eFJlcXVlc3RJZCA9IHRoaXMuX3BlbmRpbmdBcHByb3ZhbC50eFJlcXVlc3RJZDtcblxuICAgIGlmICghdGhpcy53YWxsZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignV2FsbGV0IG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIGlmICghd2FsbGV0UGFzc3BocmFzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd3YWxsZXRQYXNzcGhyYXNlIG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIGlmICghdHhSZXF1ZXN0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHhSZXF1ZXN0SWQgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjcnlwdGVkUHJ2ID0gYXdhaXQgdGhpcy53YWxsZXQuZ2V0UHJ2KHsgd2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCB0aGlzLnRzc1V0aWxzIS5yZWNyZWF0ZVR4UmVxdWVzdCh0eFJlcXVlc3RJZCwgZGVjcnlwdGVkUHJ2LCByZXFJZCk7XG4gICAgaWYgKHR4UmVxdWVzdC5hcGlWZXJzaW9uID09PSAnbGl0ZScpIHtcbiAgICAgIGlmICghdHhSZXF1ZXN0LnVuc2lnbmVkVHhzIHx8IHR4UmVxdWVzdC51bnNpZ25lZFR4cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGVycm9yLCBubyB0cmFuc2FjdGlvbnMgZm91bmQgaW4gdHhSZXF1ZXN0LicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHhIZXg6IHR4UmVxdWVzdC51bnNpZ25lZFR4c1swXS5zZXJpYWxpemVkVHhIZXgsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXR4UmVxdWVzdC50cmFuc2FjdGlvbnMgfHwgdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGVycm9yLCBubyB0cmFuc2FjdGlvbnMgZm91bmQgaW4gdHhSZXF1ZXN0LicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHhIZXg6IHR4UmVxdWVzdC50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zZXJpYWxpemVkVHhIZXgsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNyZWF0ZSBhIHRyYW5zYWN0aW9uIGZvciBhIHBlbmRpbmcgYXBwcm92YWwgdG8gcmVzcG9uZCB0byB1cGRhdGVkIG5ldHdvcmsgY29uZGl0aW9uc1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSByZXFJZFxuICAgKi9cbiAgYXN5bmMgcmVjcmVhdGVBbmRTaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBhbnkgPSB7fSwgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlcik6IFByb21pc2U8YW55PiB7XG4gICAgLy8gdGhpcyBtZXRob2Qgb25seSBtYWtlcyBzZW5zZSB3aXRoIGV4aXN0aW5nIHRyYW5zYWN0aW9uIHJlcXVlc3RzXG4gICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0ID0gdGhpcy5pbmZvKCkudHJhbnNhY3Rpb25SZXF1ZXN0O1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHRyYW5zYWN0aW9uUmVxdWVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IHJlY3JlYXRlIHRyYW5zYWN0aW9uIHdpdGhvdXQgdHJhbnNhY3Rpb24gcmVxdWVzdCcpO1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMud2FsbGV0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgcmVjcmVhdGUgdHJhbnNhY3Rpb24gd2l0aG91dCB3YWxsZXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbFByZWJ1aWxkID0gdHJhbnNhY3Rpb25SZXF1ZXN0LmNvaW5TcGVjaWZpY1t0aGlzLmJhc2VDb2luLnR5cGVdO1xuXG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHRyYW5zYWN0aW9uUmVxdWVzdC5yZWNpcGllbnRzO1xuICAgIGxldCBwcmVidWlsZFBhcmFtcyA9IF8uZXh0ZW5kKHt9LCBwYXJhbXMsIHsgcmVjaXBpZW50czogcmVjaXBpZW50cyB9LCB0cmFuc2FjdGlvblJlcXVlc3QuYnVpbGRQYXJhbXMpO1xuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKG9yaWdpbmFsUHJlYnVpbGQuaG9wVHJhbnNhY3Rpb24pKSB7XG4gICAgICBwcmVidWlsZFBhcmFtcy5ob3AgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcVRyYWNlciA9IHJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgaWYgKHRyYW5zYWN0aW9uUmVxdWVzdC5idWlsZFBhcmFtcyAmJiB0cmFuc2FjdGlvblJlcXVlc3QuYnVpbGRQYXJhbXMudHlwZSA9PT0gJ2NvbnNvbGlkYXRlJykge1xuICAgICAgLy8gY29uc29saWRhdGUgdGFnIGlzIGluIHRoZSBidWlsZCBwYXJhbXMgLSB0aGlzIGlzIGEgY29uc29saWRhdGlvbiB0cmFuc2FjdGlvbiwgc29cbiAgICAgIC8vIGl0IG5lZWRzIHRvIGJlIHJlYnVpbHQgdXNpbmcgdGhlIHNwZWNpYWwgY29uc29saWRhdGlvbiBidWlsZCByb3V0ZVxuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gICAgICBwcmVidWlsZFBhcmFtcy5wcmVidWlsZFR4ID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgICAucG9zdCh0aGlzLndhbGxldC51cmwoYC9jb25zb2xpZGF0ZVVuc3BlbnRzYCkpXG4gICAgICAgIC5zZW5kKEJ1aWxkUGFyYW1zLmVuY29kZShwcmVidWlsZFBhcmFtcykpXG4gICAgICAgIC5yZXN1bHQoKTtcbiAgICAgIGRlbGV0ZSBwcmVidWlsZFBhcmFtcy5yZWNpcGllbnRzO1xuICAgIH1cblxuICAgIHByZWJ1aWxkUGFyYW1zID0gXy5leHRlbmQoe30sIHByZWJ1aWxkUGFyYW1zLCB7IHJlcUlkOiByZXFJZCB9KTtcbiAgICBjb25zdCBzaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHRoaXMud2FsbGV0LnByZWJ1aWxkQW5kU2lnblRyYW5zYWN0aW9uKHByZWJ1aWxkUGFyYW1zKTtcbiAgICAvLyBjb21wYXJlIFBBWUdvIGZlZXNcbiAgICBjb25zdCBvcmlnaW5hbFBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5iYXNlQ29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiBwcmVidWlsZFBhcmFtcyxcbiAgICAgIHdhbGxldDogdGhpcy53YWxsZXQsXG4gICAgICB0eFByZWJ1aWxkOiBvcmlnaW5hbFByZWJ1aWxkLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlY3JlYXRlZFBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgdGhpcy5iYXNlQ29pbi5wYXJzZVRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UGFyYW1zOiBwcmVidWlsZFBhcmFtcyxcbiAgICAgIHdhbGxldDogdGhpcy53YWxsZXQsXG4gICAgICB0eFByZWJ1aWxkOiBzaWduZWRUcmFuc2FjdGlvbixcbiAgICB9KTtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlY3JlYXRlZFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCkpIHtcbiAgICAgIHJldHVybiBzaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgcmVjcmVhdGVkUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50ICE9PSAnYmlnaW50JyAmJlxuICAgICAgIV8uaXNGaW5pdGUocmVjcmVhdGVkUGFyc2VkVHJhbnNhY3Rpb24uaW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbXBsaWNpdCBleHRlcm5hbCBzcGVuZCBhbW91bnQgY291bGQgbm90IGJlIGRldGVybWluZWQnKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIV8uaXNVbmRlZmluZWQob3JpZ2luYWxQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpICYmXG4gICAgICByZWNyZWF0ZWRQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQgPiBvcmlnaW5hbFBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZWNyZWF0ZWQgdHJhbnNhY3Rpb24gaXMgdXNpbmcgYSBoaWdoZXIgcGF5LWFzLXlvdS1nby1mZWUnKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25lZFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLypcbiAgICogQ29sZCB3YWxsZXRzIGNhbm5vdCByZWNyZWF0ZSB0cmFuc2FjdGlvbnMgaWYgdGhlIG9ubHkgdGhpbmcgcHJvdmlkZWQgaXMgdGhlIHdhbGxldCBwYXNzcGhyYXNlXG4gICAqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiBjYW4gYmUgcmVjcmVhdGVkIGlmIGVpdGhlclxuICAgKiDigJMgdGhlcmUgaXMgYW4geHBydlxuICAgKiDigJMgdGhlcmUgaXMgYSB3YWxsZXRQYXNzcGhyYXNlIGFuZCB0aGUgd2FsbGV0IGlzIG5vdCBjb2xkIChiZWNhdXNlIGlmIGl0J3MgY29sZCwgdGhlIHBhc3NwaHJhc2UgaXMgb2YgbGl0dGxlIHVzZSlcbiAgICpcbiAgICogVGhlcmVmb3JlLCBpZiBuZWl0aGVyIG9mIHRoZXNlIGlzIHRydWUsIHRoZSB0cmFuc2FjdGlvbiBjYW5ub3QgYmUgcmVjcmVhdGVkLCB3aGljaCBpcyByZWZsZWN0ZWQgaW4gdGhlIGlmXG4gICAqIHN0YXRlbWVudCBiZWxvdy5cbiAgICpcbiAgICogTGlnaHRuaW5nIHRyYW5zYWN0aW9ucyBjYW5ub3QgYmUgcmVjcmVhdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBjYW5SZWNyZWF0ZVRyYW5zYWN0aW9uKHBhcmFtczogQXBwcm92ZU9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0NvbGRXYWxsZXQgPSAhIV8uZ2V0KHRoaXMud2FsbGV0LCAnX3dhbGxldC5pc0NvbGQnKTtcbiAgICBjb25zdCBpc09GQ1dhbGxldCA9IHRoaXMuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdvZmMnOyAvLyBPZmYtY2hhaW4gdHJhbnNhY3Rpb25zIGRvbid0IG5lZWQgdG8gYmUgcmVidWlsdFxuICAgIGNvbnN0IGlzTGlnaHRuaW5nV2FsbGV0ID0gdGhpcy5iYXNlQ29pbi5nZXRGYW1pbHkoKSA9PT0gJ2xuYnRjJztcbiAgICBpZiAoaXNMaWdodG5pbmdXYWxsZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmFtcy54cHJ2ICYmICEocGFyYW1zLndhbGxldFBhc3NwaHJhc2UgJiYgIWlzQ29sZFdhbGxldCAmJiAhaXNPRkNXYWxsZXQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHJlY2lwaWVudHMsIHRoZW4gdGhlIHRyYW5zYWN0aW9uIGNhbm5vdCBiZSByZWNyZWF0ZWRcbiAgICBjb25zdCByZWNpcGllbnRzID0gdGhpcy5pbmZvKCk/LnRyYW5zYWN0aW9uUmVxdWVzdD8uYnVpbGRQYXJhbXM/LnJlY2lwaWVudHMgfHwgW107XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuaW5mbygpPy50cmFuc2FjdGlvblJlcXVlc3Q/LmJ1aWxkUGFyYW1zPy50eXBlO1xuXG4gICAgLy8gV2Ugb25seSB3YW50IHRvIG5vdCByZWNyZWF0ZSB0cmFuc2FjdGlvbnMgd2l0aCBubyByZWNpcGllbnRzIGlmIGl0IGlzIGEgVVRYTyBjb2luLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuICEoXG4gICAgICB1dHhvbGliLmlzVmFsaWROZXR3b3JrKCh0aGlzLmJhc2VDb2luIGFzIGFueSkubmV0d29yaykgJiZcbiAgICAgIHJlY2lwaWVudHMubGVuZ3RoID09PSAwICYmXG4gICAgICB0eXBlICE9PSAnY29uc29saWRhdGUnXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAqIEludGVybmFsIGhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24gd2hpY2ggaXMgYmVpbmcgYXBwcm92ZWQuXG4gICAqIElmIHRoaXMgUEEgaXMgb2YgdHlwZSAndHJhbnNhY3Rpb25SZXF1ZXN0JyB0aGlzIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIHJlYnVpbGQgYW5kIHJlc2lnbiB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtBcHByb3ZlT3B0aW9uc30gcGFyYW1zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FuUmVjcmVhdGVUcmFuc2FjdGlvbiAtXG4gICAqIEBwYXJhbSB7UmVxdWVzdFRyYWNlcn0gcmVxSWQgaWQgdHJhY2VyXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByZUFwcHJvdmUocGFyYW1zOiBBcHByb3ZlT3B0aW9ucyA9IHt9LCByZXFJZDogSVJlcXVlc3RUcmFjZXIpOiBQcm9taXNlPFByZUFwcHJvdmVSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBUcmFuc2FjdGlvblJlcXVlc3RMaXRlIG9yIE11bHRpc2lnIHR4J3MgbXVzdCBzaWduIGJlZm9yZSBwZW5kaW5nIGFwcHJvdmFsIGlzIGFwcHJvdmVkXG4gICAgLy8gUmUtc2lnbmVkIHR4IGlzIHByb3ZpZGVkIHRvIHRoZSBwZW5kaW5nIGFwcHJvdmFsIGFwaVxuICAgIGlmICh0aGlzLnR5cGUoKSA9PT0gVHlwZS5UUkFOU0FDVElPTl9SRVFVRVNUKSB7XG4gICAgICAvKlxuICAgICAgICogSWYgdGhpcyBpcyBhIHJlcXVlc3QgZm9yIGFwcHJvdmluZyBhIHRyYW5zYWN0aW9uLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIHVzZXIgaGFzIGEgcHJpdmF0ZSBrZXkgdG8gdGhlIHdhbGxldFxuICAgICAgICogKHNvbWUgYWRtaW5zIG1heSBub3QgaGF2ZSB0aGUgc3BlbmQgcGVybWlzc2lvbiksIHRoZSB0cmFuc2FjdGlvbiBjb3VsZCBlaXRoZXIgYmUgcmVicm9hZGNhc3QgYXMgaXMsIG9yIGl0IGNvdWxkXG4gICAgICAgKiBiZSByZWNvbnN0cnVjdGVkLiBJdCBpcyBwcmVmZXJhYmxlIHRvIHJlY29uc3RydWN0IGEgdHggaW4gb3JkZXIgdG8gYWRoZXJlIHRvIHRoZSBsYXRlc3QgbmV0d29yayBjb25kaXRpb25zXG4gICAgICAgKiBzdWNoIGFzIG5ld2VyIHVuc3BlbnRzLCBkaWZmZXJlbnQgZmVlcywgb3IgYSBoaWdoZXIgc2VxdWVuY2UgaWRcbiAgICAgICAqL1xuICAgICAgaWYgKHBhcmFtcy50eCkge1xuICAgICAgICAvLyB0aGUgYXBwcm92YWwgdHggd2FzIHJlY29uc3RydWN0ZWQgYW5kIGV4cGxpY2l0bHkgc3BlY2lmaWVkIC0gcGFzcyBpdCB0aHJvdWdoXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHhIZXg6IHBhcmFtcy50eCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gdGhpcyB1c2VyIG1heSBub3QgaGF2ZSBzcGVuZGluZyBwcml2aWxlZ2VzIG9yIGEgcGFzc3BocmFzZSBtYXkgbm90IGhhdmUgYmVlbiBwYXNzZWQgaW5cbiAgICAgIGlmICghdGhpcy5jYW5SZWNyZWF0ZVRyYW5zYWN0aW9uKHBhcmFtcykpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIFRyYW5zYWN0aW9uUmVxdWVzdCwgdGhlbiB0aGUgdHhSZXF1ZXN0IGFscmVhZHkgaGFzIHRoZSB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0FwcHJvdmFsLnR4UmVxdWVzdElkKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgTXVsdGlTaWcsIHRoZW4gd2UgbmVlZCB0byBmZXRjaCB0aGUgaGFsZiBzaWduZWQgdHggdG8gcHJvcGFnYXRlIHRvIHRoZSBhcHByb3ZhbCBBUElcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBfLmdldChcbiAgICAgICAgICB0aGlzLmluZm8oKSxcbiAgICAgICAgICBgdHJhbnNhY3Rpb25SZXF1ZXN0LmNvaW5TcGVjaWZpYy4ke3RoaXMuYmFzZUNvaW4udHlwZX1gXG4gICAgICAgICkgYXMgUHJlQXBwcm92ZVJlc3VsdDtcbiAgICAgICAgaWYgKCFfLmlzT2JqZWN0KHRyYW5zYWN0aW9uKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhlcmUgaXMgbmVpdGhlciBhbiBvcmlnaW5hbCB0cmFuc2FjdGlvbiBvYmplY3Qgbm9yIGNhbiBhIG5ldyBvbmUgYmUgcmVjcmVhdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fcGVuZGluZ0FwcHJvdmFsLnR4UmVxdWVzdElkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uKHBhcmFtcywgcmVxSWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVjcmVhdGVBbmRTaWduVHJhbnNhY3Rpb24ocGFyYW1zLCByZXFJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIGhlbHBlciBmdW5jdGlvbiB0byBwZXJmb3JtIGFueSBwb3N0LWFwcHJvdmFsIGFjdGlvbnMuXG4gICAqIElmIHR5cGUgaXMgJ3RyYW5zYWN0aW9uUmVxdWVzdEZ1bGwnLCB0aGlzIHdpbGwgc2lnbiB0aGUgdHhSZXF1ZXN0RnVsbCBpZiBwb3NzaWJsZVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSByZXFJZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwb3N0QXBwcm92ZShwYXJhbXM6IEFwcHJvdmVPcHRpb25zID0ge30sIHJlcUlkOiBJUmVxdWVzdFRyYWNlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy50eXBlKCkpIHtcbiAgICAgIGNhc2UgVHlwZS5UUkFOU0FDVElPTl9SRVFVRVNUX0ZVTEw6XG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nQXBwcm92YWwuc3RhdGUgPT09IFN0YXRlLkFQUFJPVkVEKSB7XG4gICAgICAgICAgLy8gQWZ0ZXIgd2UgYXBwcm92ZSBhIGxpZ2h0bmluZyB0cmFuc2FjdGlvbiwgd2Ugc2hvdWxkIHByb2NlZWQgd2l0aCBzdWJtaXR0aW5nIHRoZSBwYXltZW50XG4gICAgICAgICAgaWYgKHRoaXMuYmFzZUNvaW4uZ2V0RmFtaWx5KCkgPT09ICdsbmJ0YycpIHtcbiAgICAgICAgICAgIGFzc2VydCh0aGlzLl9wZW5kaW5nQXBwcm92YWwudHhSZXF1ZXN0SWQsICdNaXNzaW5nIHR4UmVxdWVzdElkJyk7XG4gICAgICAgICAgICAvLyB0aGlzLnBvcHVsYXRlV2FsbGV0IGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBzbyB3ZSBzaG91bGQgYmUgZ29vZCBoZXJlXG4gICAgICAgICAgICBhc3NlcnQodGhpcy53YWxsZXQ/LmlkKCksICdNaXNzaW5nIHdhbGxldCBpZCcpO1xuICAgICAgICAgICAgLy8gdG9kbzogYWRkIHRlc3QgY2FzZSBmb3IgdGhpc1xuICAgICAgICAgICAgLy8gYWRkIG5ldyB0cmFuc2ZlciBiZWZvcmUgc2VuZGluZyB0eFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgICAgICAgICAucG9zdChcbiAgICAgICAgICAgICAgICB0aGlzLmJpdGdvLnVybChcbiAgICAgICAgICAgICAgICAgICcvd2FsbGV0LycgKyB0aGlzLndhbGxldD8uaWQoKSArICcvdHhyZXF1ZXN0cy8nICsgdGhpcy5fcGVuZGluZ0FwcHJvdmFsLnR4UmVxdWVzdElkICsgJy90cmFuc2ZlcnMnLFxuICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc2VuZCgpXG4gICAgICAgICAgICAgIC5yZXN1bHQoKTtcbiAgICAgICAgICAgIGF3YWl0IHNlbmRUeFJlcXVlc3QoXG4gICAgICAgICAgICAgIHRoaXMuYml0Z28sXG4gICAgICAgICAgICAgIHRoaXMud2FsbGV0Py5pZCgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0FwcHJvdmFsLnR4UmVxdWVzdElkLFxuICAgICAgICAgICAgICBSZXF1ZXN0VHlwZS50eCxcbiAgICAgICAgICAgICAgcmVxSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhblJlY3JlYXRlVHJhbnNhY3Rpb24ocGFyYW1zKSAmJiB0aGlzLmJhc2VDb2luLnN1cHBvcnRzVHNzKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVBbmRTaWduVFNTVHJhbnNhY3Rpb24ocGFyYW1zLCByZXFJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBzZWxmLndhbGxldCBpcyBzZXRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcG9wdWxhdGVXYWxsZXQoKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcbiAgICBpZiAodGhpcy53YWxsZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gVE9ETyhXUC0xMzQxKTogY29uc29saWRhdGUvc2ltcGxpZnkgdGhpcyBsb2dpY1xuICAgIHN3aXRjaCAodGhpcy50eXBlKCkpIHtcbiAgICAgIGNhc2UgVHlwZS5UUkFOU0FDVElPTl9SRVFVRVNUOlxuICAgICAgICBjb25zdCB0cmFuc2FjdGlvblJlcXVlc3QgPSB0aGlzLmluZm8oKS50cmFuc2FjdGlvblJlcXVlc3Q7XG4gICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHRyYW5zYWN0aW9uUmVxdWVzdCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgb2JqZWN0IHByb3BlcnR5IHRyYW5zYWN0aW9uUmVxdWVzdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZFdhbGxldDogSVdhbGxldCA9IGF3YWl0IHRoaXMuYmFzZUNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB0cmFuc2FjdGlvblJlcXVlc3Quc291cmNlV2FsbGV0IH0pO1xuXG4gICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHVwZGF0ZWRXYWxsZXQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIC0gdW5hYmxlIHRvIGdldCB3YWxsZXQgdXNpbmcgc291cmNld2FsbGV0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndhbGxldCA9IHVwZGF0ZWRXYWxsZXQ7XG5cbiAgICAgICAgaWYgKHRoaXMud2FsbGV0LmlkKCkgIT09IHRyYW5zYWN0aW9uUmVxdWVzdC5zb3VyY2VXYWxsZXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgc291cmNlIHdhbGxldCBmb3IgcGVuZGluZyBhcHByb3ZhbCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUeXBlLlRSQU5TQUNUSU9OX1JFUVVFU1RfRlVMTDpcbiAgICAgICAgY29uc3Qgd2FsbGV0SWQgPSB0aGlzLndhbGxldElkKCk7XG4gICAgICAgIGlmICghd2FsbGV0SWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3IsIHBlbmRpbmdBcHByb3ZhbC53YWxsZXQgaXMgZXhwZWN0ZWQgdG8gYmUgZGVmaW5lZCEnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndhbGxldCA9IGF3YWl0IHRoaXMuYmFzZUNvaW4ud2FsbGV0cygpLmdldCh7IGlkOiB0aGlzLndhbGxldElkKCkgfSk7XG4gICAgICAgIGlmICghdGhpcy53YWxsZXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgLSB1bmFibGUgdG8gZ2V0IHdhbGxldCB1c2luZyBwZW5kaW5nQXBwcm92YWwud2FsbGV0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxufVxuIl19