@bitgo/abstract-utxo 10.16.0 → 10.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/abstractUtxoCoin.d.ts +9 -13
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +28 -14
- package/dist/cjs/src/address/fixedScript.d.ts +4 -9
- package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
- package/dist/cjs/src/address/fixedScript.js +18 -50
- package/dist/cjs/src/descriptor/NamedDescriptor.d.ts +4 -5
- package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/NamedDescriptor.js +4 -6
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +3 -38
- package/dist/cjs/src/descriptor/builder/builder.d.ts +2 -3
- package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/builder/builder.js +1 -1
- package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/builder/parse.js +3 -3
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts +2 -2
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.js +1 -1
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts +1 -1
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/descriptorWallet.js +1 -1
- package/dist/cjs/src/descriptor/index.d.ts +1 -1
- package/dist/cjs/src/descriptor/index.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/index.js +1 -1
- package/dist/cjs/src/descriptor/validatePolicy.d.ts +3 -3
- package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -1
- package/dist/cjs/src/descriptor/validatePolicy.js +3 -3
- package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
- package/dist/cjs/src/impl/bch/bch.js +6 -38
- package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts +15 -5
- package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts.map +1 -1
- package/dist/cjs/src/impl/btc/inscriptionBuilder.js +43 -55
- package/dist/cjs/src/impl/doge/doge.d.ts +2 -1
- package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
- package/dist/cjs/src/impl/doge/doge.js +1 -1
- package/dist/cjs/src/impl/ltc/ltc.d.ts +0 -1
- package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -1
- package/dist/cjs/src/impl/ltc/ltc.js +3 -41
- package/dist/cjs/src/impl/ltc/tltc.d.ts +0 -1
- package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -1
- package/dist/cjs/src/impl/ltc/tltc.js +3 -40
- package/dist/cjs/src/index.d.ts +2 -0
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +3 -1
- package/dist/cjs/src/keychains.d.ts +5 -0
- package/dist/cjs/src/keychains.d.ts.map +1 -1
- package/dist/cjs/src/keychains.js +10 -1
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +2 -2
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +3 -2
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/cjs/src/offlineVault/descriptor/transaction.js +5 -8
- package/dist/cjs/src/recovery/RecoveryProvider.d.ts +1 -3
- package/dist/cjs/src/recovery/RecoveryProvider.d.ts.map +1 -1
- package/dist/cjs/src/recovery/RecoveryProvider.js +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +73 -4
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.js +163 -129
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts +5 -5
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/crossChainRecovery.js +22 -121
- package/dist/cjs/src/recovery/psbt.d.ts +8 -31
- package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
- package/dist/cjs/src/recovery/psbt.js +14 -126
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +3 -3
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/explainPsbt.js +17 -54
- package/dist/cjs/src/transaction/descriptor/index.d.ts +1 -1
- package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/index.js +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.d.ts +6 -4
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.js +24 -50
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts +6 -7
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/signPsbt.js +19 -18
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +4 -4
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +10 -38
- package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/explainTransaction.js +3 -2
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +5 -3
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/SigningError.js +10 -2
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +1 -8
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/parseOutput.js +8 -12
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +2 -2
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +36 -11
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +4 -2
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +3 -2
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +15 -25
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +6 -5
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +42 -7
- package/dist/cjs/src/transaction/outputDifference.d.ts +5 -1
- package/dist/cjs/src/transaction/outputDifference.d.ts.map +1 -1
- package/dist/cjs/src/transaction/outputDifference.js +6 -2
- package/dist/cjs/src/transaction/recipient.d.ts +5 -0
- package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
- package/dist/cjs/src/transaction/recipient.js +14 -1
- package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/signTransaction.js +10 -10
- package/dist/cjs/src/unspent.d.ts +55 -0
- package/dist/cjs/src/unspent.d.ts.map +1 -0
- package/dist/cjs/src/unspent.js +12 -0
- package/dist/cjs/src/wasmUtil.d.ts +29 -0
- package/dist/cjs/src/wasmUtil.d.ts.map +1 -0
- package/dist/cjs/src/wasmUtil.js +87 -0
- package/dist/cjs/test/unit/address.d.ts +1 -1
- package/dist/cjs/test/unit/address.d.ts.map +1 -1
- package/dist/cjs/test/unit/address.js +107 -137
- package/dist/cjs/test/unit/bip322.js +50 -1
- package/dist/cjs/test/unit/coins.js +7 -2
- package/dist/cjs/test/unit/customSigner.js +5 -4
- package/dist/cjs/test/unit/descriptor/NamedDescriptor.js +37 -4
- package/dist/cjs/test/unit/descriptor/builder.js +10 -4
- package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.js +37 -4
- package/dist/cjs/test/unit/descriptor/descriptorWallet.js +40 -6
- package/dist/cjs/test/unit/descriptorAddress.d.ts +2 -2
- package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -1
- package/dist/cjs/test/unit/descriptorAddress.js +10 -9
- package/dist/cjs/test/unit/explainTransaction.js +26 -3
- package/dist/cjs/test/unit/keychains.js +40 -1
- package/dist/cjs/test/unit/postProcessPrebuild.d.ts +2 -0
- package/dist/cjs/test/unit/postProcessPrebuild.d.ts.map +1 -0
- package/dist/cjs/test/unit/postProcessPrebuild.js +62 -0
- package/dist/cjs/test/unit/prebuildAndSign.d.ts +0 -4
- package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -1
- package/dist/cjs/test/unit/prebuildAndSign.js +12 -31
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +82 -258
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.js +144 -0
- package/dist/cjs/test/unit/recovery/crossChainRecovery.js +41 -37
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +186 -0
- package/dist/cjs/test/unit/recovery/mock.d.ts +15 -8
- package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -1
- package/dist/cjs/test/unit/recovery/mock.js +50 -77
- package/dist/cjs/test/unit/signTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/signTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/signTransaction.js +244 -0
- package/dist/cjs/test/unit/testSpoofTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/testSpoofTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/testSpoofTransaction.js +114 -0
- package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.js +46 -12
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts.map +1 -1
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.js +38 -4
- package/dist/cjs/test/unit/transaction/descriptor/parse.js +22 -19
- package/dist/cjs/test/unit/transaction/descriptor/sign.js +60 -16
- package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +43 -10
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -2
- package/dist/cjs/test/unit/transaction/outputDifference.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/outputDifference.js +117 -0
- package/dist/cjs/test/unit/transaction.js +8 -226
- package/dist/cjs/test/unit/txFormat.d.ts.map +1 -1
- package/dist/cjs/test/unit/txFormat.js +9 -9
- package/dist/cjs/test/unit/util/address.d.ts +13 -0
- package/dist/cjs/test/unit/util/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/address.js +15 -0
- package/dist/cjs/test/unit/util/index.d.ts +3 -0
- package/dist/cjs/test/unit/util/index.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/index.js +4 -1
- package/dist/cjs/test/unit/util/keychains.d.ts +29 -0
- package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/keychains.js +51 -1
- package/dist/cjs/test/unit/util/nockBitGo.d.ts +8 -1
- package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/nockBitGo.js +17 -1
- package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/nockIndexerAPI.js +4 -37
- package/dist/cjs/test/unit/util/psbt.d.ts +19 -0
- package/dist/cjs/test/unit/util/psbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/psbt.js +21 -0
- package/dist/cjs/test/unit/util/transaction.d.ts +8 -4
- package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/transaction.js +22 -2
- package/dist/cjs/test/unit/util/unspents.d.ts +66 -8
- package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/unspents.js +130 -15
- package/dist/cjs/test/unit/util/utxoCoins.d.ts +13 -0
- package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
- package/dist/cjs/test/unit/util/utxoCoins.js +33 -2
- package/dist/cjs/test/unit/wallet.js +4 -4
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts +9 -13
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +30 -16
- package/dist/esm/address/fixedScript.d.ts +4 -9
- package/dist/esm/address/fixedScript.d.ts.map +1 -1
- package/dist/esm/address/fixedScript.js +18 -17
- package/dist/esm/descriptor/NamedDescriptor.d.ts +4 -5
- package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -1
- package/dist/esm/descriptor/NamedDescriptor.js +5 -7
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/esm/descriptor/assertDescriptorWalletAddress.js +3 -5
- package/dist/esm/descriptor/builder/builder.d.ts +2 -3
- package/dist/esm/descriptor/builder/builder.d.ts.map +1 -1
- package/dist/esm/descriptor/builder/builder.js +1 -1
- package/dist/esm/descriptor/builder/parse.d.ts.map +1 -1
- package/dist/esm/descriptor/builder/parse.js +3 -3
- package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +2 -2
- package/dist/esm/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
- package/dist/esm/descriptor/createWallet/createDescriptors.js +1 -1
- package/dist/esm/descriptor/descriptorWallet.d.ts +1 -1
- package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -1
- package/dist/esm/descriptor/descriptorWallet.js +1 -1
- package/dist/esm/descriptor/index.d.ts +1 -1
- package/dist/esm/descriptor/index.d.ts.map +1 -1
- package/dist/esm/descriptor/index.js +1 -1
- package/dist/esm/descriptor/validatePolicy.d.ts +3 -3
- package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -1
- package/dist/esm/descriptor/validatePolicy.js +3 -3
- package/dist/esm/impl/bch/bch.d.ts.map +1 -1
- package/dist/esm/impl/bch/bch.js +6 -5
- package/dist/esm/impl/btc/inscriptionBuilder.d.ts +15 -5
- package/dist/esm/impl/btc/inscriptionBuilder.d.ts.map +1 -1
- package/dist/esm/impl/btc/inscriptionBuilder.js +44 -23
- package/dist/esm/impl/doge/doge.d.ts +2 -1
- package/dist/esm/impl/doge/doge.d.ts.map +1 -1
- package/dist/esm/impl/doge/doge.js +1 -1
- package/dist/esm/impl/ltc/ltc.d.ts +0 -1
- package/dist/esm/impl/ltc/ltc.d.ts.map +1 -1
- package/dist/esm/impl/ltc/ltc.js +3 -8
- package/dist/esm/impl/ltc/tltc.d.ts +0 -1
- package/dist/esm/impl/ltc/tltc.d.ts.map +1 -1
- package/dist/esm/impl/ltc/tltc.js +3 -7
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/keychains.d.ts +5 -0
- package/dist/esm/keychains.d.ts.map +1 -1
- package/dist/esm/keychains.js +9 -1
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +2 -2
- package/dist/esm/offlineVault/descriptor/transaction.d.ts +3 -2
- package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
- package/dist/esm/offlineVault/descriptor/transaction.js +5 -8
- package/dist/esm/recovery/RecoveryProvider.d.ts +1 -3
- package/dist/esm/recovery/RecoveryProvider.d.ts.map +1 -1
- package/dist/esm/recovery/RecoveryProvider.js +1 -1
- package/dist/esm/recovery/backupKeyRecovery.d.ts +73 -4
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/backupKeyRecovery.js +165 -100
- package/dist/esm/recovery/crossChainRecovery.d.ts +5 -5
- package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/crossChainRecovery.js +24 -90
- package/dist/esm/recovery/psbt.d.ts +8 -31
- package/dist/esm/recovery/psbt.d.ts.map +1 -1
- package/dist/esm/recovery/psbt.js +14 -91
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts +3 -3
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/explainPsbt.js +14 -18
- package/dist/esm/transaction/descriptor/index.d.ts +1 -1
- package/dist/esm/transaction/descriptor/index.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/index.js +1 -1
- package/dist/esm/transaction/descriptor/parse.d.ts +6 -4
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/parse.js +22 -15
- package/dist/esm/transaction/descriptor/signPsbt.d.ts +6 -7
- package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/signPsbt.js +19 -18
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +4 -4
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.js +10 -5
- package/dist/esm/transaction/explainTransaction.d.ts +2 -1
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/explainTransaction.js +3 -2
- package/dist/esm/transaction/fixedScript/SigningError.d.ts +5 -3
- package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/SigningError.js +8 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +2 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/explainTransaction.js +1 -8
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/parseOutput.js +8 -12
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +2 -2
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/parseTransaction.js +36 -11
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +4 -2
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +3 -2
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signPsbtWasm.js +14 -24
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +6 -5
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/signTransaction.js +10 -8
- package/dist/esm/transaction/outputDifference.d.ts +5 -1
- package/dist/esm/transaction/outputDifference.d.ts.map +1 -1
- package/dist/esm/transaction/outputDifference.js +5 -2
- package/dist/esm/transaction/recipient.d.ts +5 -0
- package/dist/esm/transaction/recipient.d.ts.map +1 -1
- package/dist/esm/transaction/recipient.js +13 -1
- package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/signTransaction.js +10 -10
- package/dist/esm/unspent.d.ts +55 -0
- package/dist/esm/unspent.d.ts.map +1 -0
- package/dist/esm/unspent.js +8 -0
- package/dist/esm/wasmUtil.d.ts +29 -0
- package/dist/esm/wasmUtil.d.ts.map +1 -0
- package/dist/esm/wasmUtil.js +47 -0
- package/package.json +13 -14
- package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts +0 -2
- package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/btc/unit/btc.js +0 -220
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts +0 -4
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.js +0 -10
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts +0 -2
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.js +0 -18
- package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts +0 -2
- package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts.map +0 -1
- package/dist/cjs/test/unit/impl/ltc/unit/index.js +0 -39
- package/dist/cjs/test/unit/transaction/descriptor/outputDifference.d.ts.map +0 -1
- package/dist/cjs/test/unit/transaction/descriptor/outputDifference.js +0 -76
- /package/dist/cjs/test/unit/transaction/{descriptor/outputDifference.d.ts → outputDifference.d.ts} +0 -0
|
@@ -37,14 +37,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
const assert_1 = __importDefault(require("assert"));
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const testutil_1 = require("@bitgo/utxo-core/testutil");
|
|
43
|
-
const descriptor_2 = require("@bitgo/utxo-core/descriptor");
|
|
40
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
41
|
+
const testutils = __importStar(require("@bitgo/wasm-utxo/testutils"));
|
|
44
42
|
const parse_1 = require("../../../../src/transaction/descriptor/parse");
|
|
45
43
|
const verifyTransaction_1 = require("../../../../src/transaction/descriptor/verifyTransaction");
|
|
46
44
|
const parseToAmountType_1 = require("../../../../src/transaction/descriptor/parseToAmountType");
|
|
47
45
|
const fixtures_utils_1 = require("./fixtures.utils");
|
|
46
|
+
const { getDefaultXPubs, getDescriptor, getDescriptorMap, mockPsbtDefault } = testutils.descriptor;
|
|
47
|
+
const { toPlainObject } = testutils;
|
|
48
48
|
const { assertEqualFixture } = (0, fixtures_utils_1.getFixtureRoot)(__dirname + '/fixtures');
|
|
49
49
|
function toBaseOutput(output, amountType) {
|
|
50
50
|
(0, assert_1.default)(output.address);
|
|
@@ -66,11 +66,11 @@ function toMaxOutput(output) {
|
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
68
|
describe('parse', function () {
|
|
69
|
-
const descriptorSelf =
|
|
70
|
-
const descriptorOther =
|
|
71
|
-
const psbt =
|
|
69
|
+
const descriptorSelf = getDescriptor('Wsh2Of3', getDefaultXPubs('a'));
|
|
70
|
+
const descriptorOther = getDescriptor('Wsh2Of3', getDefaultXPubs('b'));
|
|
71
|
+
const psbt = mockPsbtDefault({ descriptorSelf, descriptorOther });
|
|
72
72
|
function recipient(descriptor, index, value = 1000) {
|
|
73
|
-
return { value, address:
|
|
73
|
+
return { value, address: wasm_utxo_1.descriptorWallet.createAddressFromDescriptor(descriptor, index, 'btc') };
|
|
74
74
|
}
|
|
75
75
|
function internalRecipient(index, value) {
|
|
76
76
|
return recipient(descriptorSelf, index, value);
|
|
@@ -79,16 +79,19 @@ describe('parse', function () {
|
|
|
79
79
|
return recipient(descriptorOther, index, value);
|
|
80
80
|
}
|
|
81
81
|
function getBaseParsedTransaction(psbt, recipients) {
|
|
82
|
-
return (0, parse_1.toBaseParsedTransactionOutputsFromPsbt)(psbt,
|
|
82
|
+
return (0, parse_1.toBaseParsedTransactionOutputsFromPsbt)(psbt, getDescriptorMap('Wsh2Of3', getDefaultXPubs('a')), recipients.map(toBaseOutputString), 'btc');
|
|
83
83
|
}
|
|
84
|
+
const psbtOutputs = psbt.getOutputsWithAddress('btc');
|
|
85
|
+
const psbtOutput0 = psbtOutputs[0];
|
|
86
|
+
const psbtOutput1 = psbtOutputs[1];
|
|
84
87
|
describe('toBase', function () {
|
|
85
88
|
it('should return the correct BaseParsedTransactionOutputs', async function () {
|
|
86
|
-
await assertEqualFixture('parseWithoutRecipients.json',
|
|
87
|
-
await assertEqualFixture('parseWithExternalRecipient.json',
|
|
88
|
-
await assertEqualFixture('parseWithInternalRecipient.json',
|
|
89
|
+
await assertEqualFixture('parseWithoutRecipients.json', toPlainObject(getBaseParsedTransaction(psbt, [])));
|
|
90
|
+
await assertEqualFixture('parseWithExternalRecipient.json', toPlainObject(getBaseParsedTransaction(psbt, [psbtOutput0])));
|
|
91
|
+
await assertEqualFixture('parseWithInternalRecipient.json', toPlainObject(getBaseParsedTransaction(psbt, [psbtOutput1])));
|
|
89
92
|
await assertEqualFixture('parseWithExternalRecipient.json',
|
|
90
93
|
// max recipient: ignore actual value
|
|
91
|
-
|
|
94
|
+
toPlainObject(getBaseParsedTransaction(psbt, [toMaxOutput(psbtOutput0)])));
|
|
92
95
|
});
|
|
93
96
|
function assertEqualValidationError(actual, expected) {
|
|
94
97
|
function normErrors(e) {
|
|
@@ -114,22 +117,22 @@ describe('parse', function () {
|
|
|
114
117
|
return new verifyTransaction_1.ErrorMissingOutputs([{ ...toBaseOutputBigInt(output), external }]);
|
|
115
118
|
}
|
|
116
119
|
it('should throw expected error: no recipient requested', function () {
|
|
117
|
-
assertValidationError(() => (0, verifyTransaction_1.assertExpectedOutputDifference)(getBaseParsedTransaction(psbt, [])), new verifyTransaction_1.AggregateValidationError([implicitOutputError(
|
|
120
|
+
assertValidationError(() => (0, verifyTransaction_1.assertExpectedOutputDifference)(getBaseParsedTransaction(psbt, [])), new verifyTransaction_1.AggregateValidationError([implicitOutputError(psbtOutput0)]));
|
|
118
121
|
});
|
|
119
122
|
it('should throw expected error: only internal recipient requested', function () {
|
|
120
|
-
assertValidationError(() => (0, verifyTransaction_1.assertExpectedOutputDifference)(getBaseParsedTransaction(psbt, [
|
|
123
|
+
assertValidationError(() => (0, verifyTransaction_1.assertExpectedOutputDifference)(getBaseParsedTransaction(psbt, [psbtOutput1])), new verifyTransaction_1.AggregateValidationError([implicitOutputError(psbtOutput0)]));
|
|
121
124
|
});
|
|
122
125
|
it('should throw expected error: only internal max recipient requested', function () {
|
|
123
|
-
assertValidationError(() => (0, verifyTransaction_1.assertExpectedOutputDifference)(getBaseParsedTransaction(psbt, [toMaxOutput(
|
|
126
|
+
assertValidationError(() => (0, verifyTransaction_1.assertExpectedOutputDifference)(getBaseParsedTransaction(psbt, [toMaxOutput(psbtOutput1)])), new verifyTransaction_1.AggregateValidationError([implicitOutputError(psbtOutput0)]));
|
|
124
127
|
});
|
|
125
128
|
it('should throw expected error: swapped recipient', function () {
|
|
126
129
|
const recipient = externalRecipient(99);
|
|
127
|
-
assertValidationError(() => (0, verifyTransaction_1.assertExpectedOutputDifference)(getBaseParsedTransaction(psbt, [recipient])), new verifyTransaction_1.AggregateValidationError([missingOutputError(recipient), implicitOutputError(
|
|
130
|
+
assertValidationError(() => (0, verifyTransaction_1.assertExpectedOutputDifference)(getBaseParsedTransaction(psbt, [recipient])), new verifyTransaction_1.AggregateValidationError([missingOutputError(recipient), implicitOutputError(psbtOutput0)]));
|
|
128
131
|
});
|
|
129
132
|
it('should throw expected error: missing internal recipient', function () {
|
|
130
133
|
const recipient = internalRecipient(99);
|
|
131
|
-
assertValidationError(() => (0, verifyTransaction_1.assertExpectedOutputDifference)(getBaseParsedTransaction(psbt, [recipient])), new verifyTransaction_1.AggregateValidationError([missingOutputError(recipient), implicitOutputError(
|
|
134
|
+
assertValidationError(() => (0, verifyTransaction_1.assertExpectedOutputDifference)(getBaseParsedTransaction(psbt, [recipient])), new verifyTransaction_1.AggregateValidationError([missingOutputError(recipient), implicitOutputError(psbtOutput0)]));
|
|
132
135
|
});
|
|
133
136
|
});
|
|
134
137
|
});
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9wYXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qix5REFBMkM7QUFFM0MscUVBSzhDO0FBQzlDLHdEQUEwRDtBQUMxRCw0REFBMEU7QUFFMUUsd0VBR3NEO0FBQ3RELGdHQUtrRTtBQUNsRSxnR0FBd0Y7QUFHeEYscURBQWtEO0FBRWxELE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxHQUFHLElBQUEsK0JBQWMsRUFBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLENBQUM7QUFPdkUsU0FBUyxZQUFZLENBQVUsTUFBdUIsRUFBRSxVQUErQjtJQUNyRixJQUFBLGdCQUFNLEVBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLE9BQU87UUFDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDdkIsTUFBTSxFQUFFLElBQUEsZ0NBQVksRUFBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBWTtLQUMxRCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsTUFBdUI7SUFDakQsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLE1BQXVCO0lBQ2pELE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsTUFBdUI7SUFDMUMsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNULEtBQUssRUFBRSxLQUFLO0tBQ2IsQ0FBQztBQUNKLENBQUM7QUFFRCxRQUFRLENBQUMsT0FBTyxFQUFFO0lBQ2hCLE1BQU0sY0FBYyxHQUFHLElBQUEsMEJBQWEs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QXdCLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUNqRixJQUFJLDRDQUF3QixDQUFDLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEcsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHtcbiAgZ2V0RGVmYXVsdFhQdWJzLFxuICBnZXREZXNjcmlwdG9yLFxuICBnZXREZXNjcmlwdG9yTWFwLFxuICBtb2NrUHNidERlZmF1bHQsXG59IGZyb20gJ0BiaXRnby91dHhvLWNvcmUvdGVzdHV0aWwvZGVzY3JpcHRvcic7XG5pbXBvcnQgeyB0b1BsYWluT2JqZWN0IH0gZnJvbSAnQGJpdGdvL3V0eG8tY29yZS90ZXN0dXRpbCc7XG5pbXBvcnQgeyBjcmVhdGVBZGRyZXNzRnJvbURlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vdXR4by1jb3JlL2Rlc2NyaXB0b3InO1xuXG5pbXBvcnQge1xuICBQYXJzZWRPdXRwdXRzQmlnSW50LFxuICB0b0Jhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHNGcm9tUHNidCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2Rlc2NyaXB0b3IvcGFyc2UnO1xuaW1wb3J0IHtcbiAgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yLFxuICBhc3NlcnRFeHBlY3RlZE91dHB1dERpZmZlcmVuY2UsXG4gIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMsXG4gIEVycm9yTWlzc2luZ091dHB1dHMsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9kZXNjcmlwdG9yL3ZlcmlmeVRyYW5zYWN0aW9uJztcbmltcG9ydCB7IHRvQW1vdW50VHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9kZXNjcmlwdG9yL3BhcnNlVG9BbW91bnRUeXBlJztcbmltcG9ydCB7IEJhc2VPdXRwdXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRGaXh0dXJlUm9vdCB9IGZyb20gJy4vZml4dHVyZXMudXRpbHMnO1xuXG5jb25zdCB7IGFzc2VydEVxdWFsRml4dHVyZSB9ID0gZ2V0Rml4dHVyZVJvb3QoX19kaXJuYW1lICsgJy9maXh0dXJlcycpO1xuXG50eXBlIE91dHB1dFdpdGhWYWx1ZTxUID0gbnVtYmVyIHwgYmlnaW50IHwgc3RyaW5nPiA9IHtcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgdmFsdWU6IFQ7XG59O1xuXG5mdW5jdGlvbiB0b0Jhc2VPdXRwdXQ8VE51bWJlcj4ob3V0cHV0OiBPdXRwdXRXaXRoVmFsdWUsIGFtb3VudFR5cGU6ICdiaWdpbnQnIHwgJ3N0cmluZycpOiBCYXNlT3V0cHV0PFROdW1iZXI+IHtcbiAgYXNzZXJ0KG91dHB1dC5hZGRyZXNzKTtcbiAgcmV0dXJuIHtcbiAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICBhbW91bnQ6IHRvQW1vdW50VHlwZShvdXRwdXQudmFsdWUsIGFtb3VudFR5cGUpIGFzIFROdW1iZXIsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvQmFzZU91dHB1dEJpZ0ludChvdXRwdXQ6IE91dHB1dFdpdGhWYWx1ZSk6IEJhc2VPdXRwdXQ8YmlnaW50PiB7XG4gIHJldHVybiB0b0Jhc2VPdXRwdXQob3V0cHV0LCAnYmlnaW50Jyk7XG59XG5cbmZ1bmN0aW9uIHRvQmFzZU91dHB1dFN0cmluZyhvdXRwdXQ6IE91dHB1dFdpdGhWYWx1ZSk6IEJhc2VPdXRwdXQ8c3RyaW5nPiB7XG4gIHJldHVybiB0b0Jhc2VPdXRwdXQob3V0cHV0LCAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIHRvTWF4T3V0cHV0KG91dHB1dDogT3V0cHV0V2l0aFZhbHVlKTogT3V0cHV0V2l0aFZhbHVlPCdtYXgnPiB7XG4gIHJldHVybiB7XG4gICAgLi4ub3V0cHV0LFxuICAgIHZhbHVlOiAnbWF4JyxcbiAgfTtcbn1cblxuZGVzY3JpYmUoJ3BhcnNlJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBkZXNjcmlwdG9yU2VsZiA9IGdldERlc2NyaXB0b3IoJ1dzaDJPZjMnLCBnZXREZWZhdWx0WFB1YnMoJ2EnKSk7XG4gIGNvbnN0IGRlc2NyaXB0b3JPdGhlciA9IGdldERlc2NyaXB0b3IoJ1dzaDJPZjMnLCBnZXREZWZhdWx0WFB1YnMoJ2InKSk7XG4gIGNvbnN0IHBzYnQgPSBtb2NrUHNidERlZmF1bHQoeyBkZXNjcmlwdG9yU2VsZiwgZGVzY3JpcHRvck90aGVyIH0pO1xuXG4gIGZ1bmN0aW9uIHJlY2lwaWVudChkZXNjcmlwdG9yOiBEZXNjcmlwdG9yLCBpbmRleDogbnVtYmVyLCB2YWx1ZSA9IDEwMDApIHtcbiAgICByZXR1cm4geyB2YWx1ZSwgYWRkcmVzczogY3JlYXRlQWRkcmVzc0Zyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGluZGV4LCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcm5hbFJlY2lwaWVudChpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IE91dHB1dFdpdGhWYWx1ZSB7XG4gICAgcmV0dXJuIHJlY2lwaWVudChkZXNjcmlwdG9yU2VsZiwgaW5kZXgsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4dGVybmFsUmVjaXBpZW50KGluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyKTogT3V0cHV0V2l0aFZhbHVlIHtcbiAgICByZXR1cm4gcmVjaXBpZW50KGRlc2NyaXB0b3JPdGhlciwgaW5kZXgsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJhc2VQYXJzZWRUcmFuc2FjdGlvbihwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCByZWNpcGllbnRzOiBPdXRwdXRXaXRoVmFsdWVbXSk6IFBhcnNlZE91dHB1dHNCaWdJbnQge1xuICAgIHJldHVybiB0b0Jhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHNGcm9tUHNidChcbiAgICAgIHBzYnQsXG4gICAgICBnZXREZXNjcmlwdG9yTWFwKCdXc2gyT2YzJywgZ2V0RGVmYXVsdFhQdWJzKCdhJykpLFxuICAgICAgcmVjaXBpZW50cy5tYXAodG9CYXNlT3V0cHV0U3RyaW5nKSxcbiAgICAgICdidGMnXG4gICAgKTtcbiAgfVxuXG4gIGRlc2NyaWJlKCd0b0Jhc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydEVxdWFsRml4dHVyZSgncGFyc2VXaXRob3V0UmVjaXBpZW50cy5qc29uJywgdG9QbGFpbk9iamVjdChnZXRCYXNlUGFyc2VkVHJhbnNhY3Rpb24ocHNidCwgW10pKSk7XG4gICAgICBhd2FpdCBhc3NlcnRFcXVhbEZpeHR1cmUoXG4gICAgICAgICdwYXJzZVdpdGhFeHRlcm5hbFJlY2lwaWVudC5qc29uJyxcbiAgICAgICAgdG9QbGFpbk9iamVjdChnZXRCYXNlUGFyc2VkVHJhbnNhY3Rpb24ocHNidCwgW3BzYnQudHhPdXRwdXRzWzBdXSkpXG4gICAgICApO1xuICAgICAgYXdhaXQgYXNzZXJ0RXF1YWxGaXh0dXJlKFxuICAgICAgICAncGFyc2VXaXRoSW50ZXJuYWxSZWNpcGllbnQuanNvbicsXG4gICAgICAgIHRvUGxhaW5PYmplY3QoZ2V0QmFzZVBhcnNlZFRyYW5zYWN0aW9uKHBzYnQsIFtwc2J0LnR4T3V0cHV0c1sxXV0pKVxuICAgICAgKTtcbiAgICAgIGF3YWl0IGFzc2VydEVxdWFsRml4dHVyZShcbiAgICAgICAgJ3BhcnNlV2l0aEV4dGVybmFsUmVjaXBpZW50Lmpzb24nLFxuICAgICAgICAvLyBtYXggcmVjaXBpZW50OiBpZ25vcmUgYWN0dWFsIHZhbHVlXG4gICAgICAgIHRvUGxhaW5PYmplY3QoZ2V0QmFzZVBhcnNlZFRyYW5zYWN0aW9uKHBzYnQsIFt0b01heE91dHB1dChwc2J0LnR4T3V0cHV0c1swXSldKSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhc3NlcnRFcXVhbFZhbGlkYXRpb25FcnJvcihhY3R1YWw6IHVua25vd24sIGV4cGVjdGVkOiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIGZ1bmN0aW9uIG5vcm1FcnJvcnMoZTogRXJyb3JbXSk6IEVycm9yW10ge1xuICAgICAgICByZXR1cm4gZS5tYXAoKGUpID0+ICh7IC4uLmUsIHN0YWNrOiB1bmRlZmluZWQgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKGFjdHVhbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKG5vcm1FcnJvcnMoYWN0dWFsLmVycm9ycyksIG5vcm1FcnJvcnMoZXhwZWN0ZWQuZXJyb3JzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgZXJyb3IgdHlwZTogJyArIGFjdHVhbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXNzZXJ0VmFsaWRhdGlvbkVycm9yKGY6ICgpID0+IHZvaWQsIGV4cGVjdGVkOiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoZiwgKGVycikgPT4ge1xuICAgICAgICBhc3NlcnRFcXVhbFZhbGlkYXRpb25FcnJvcihlcnIsIGV4cGVjdGVkKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbXBsaWNpdE91dHB1dEVycm9yKG91dHB1dDogT3V0cHV0V2l0aFZhbHVlLCB7IGV4dGVybmFsID0gdHJ1ZSB9ID0ge30pOiBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3JJbXBsaWNpdEV4dGVybmFsT3V0cHV0cyhbeyAuLi50b0Jhc2VPdXRwdXRCaWdJbnQob3V0cHV0KSwgZXh0ZXJuYWwgfV0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1pc3NpbmdPdXRwdXRFcnJvcihvdXRwdXQ6IE91dHB1dFdpdGhWYWx1ZSwgeyBleHRlcm5hbCA9IHRydWUgfSA9IHt9KTogRXJyb3JNaXNzaW5nT3V0cHV0cyB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yTWlzc2luZ091dHB1dHMoW3sgLi4udG9CYXNlT3V0cHV0QmlnSW50KG91dHB1dCksIGV4dGVybmFsIH1dKTtcbiAgICB9XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGV4cGVjdGVkIGVycm9yOiBubyByZWNpcGllbnQgcmVxdWVzdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAoKSA9PiBhc3NlcnRFeHBlY3RlZE91dHB1dERpZmZlcmVuY2UoZ2V0QmFzZVBhcnNlZFRyYW5zYWN0aW9uKHBzYnQsIFtdKSksXG4gICAgICAgIG5ldyBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IoW2ltcGxpY2l0T3V0cHV0RXJyb3IocHNidC50eE91dHB1dHNbMF0pXSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGV4cGVjdGVkIGVycm9yOiBvbmx5IGludGVybmFsIHJlY2lwaWVudCByZXF1ZXN0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICgpID0+IGFzc2VydEV4cGVjdGVkT3V0cHV0RGlmZmVyZW5jZShnZXRCYXNlUGFyc2VkVHJhbnNhY3Rpb24ocHNidCwgW3BzYnQudHhPdXRwdXRzWzFdXSkpLFxuICAgICAgICBuZXcgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKFtpbXBsaWNpdE91dHB1dEVycm9yKHBzYnQudHhPdXRwdXRzWzBdKV0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBleHBlY3RlZCBlcnJvcjogb25seSBpbnRlcm5hbCBtYXggcmVjaXBpZW50IHJlcXVlc3RlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgKCkgPT4gYXNzZXJ0RXhwZWN0ZWRPdXRwdXREaWZmZXJlbmNlKGdldEJhc2VQYXJzZWRUcmFuc2FjdGlvbihwc2J0LCBbdG9NYXhPdXRwdXQocHNidC50eE91dHB1dHNbMV0pXSkpLFxuICAgICAgICBuZXcgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKFtpbXBsaWNpdE91dHB1dEVycm9yKHBzYnQudHhPdXRwdXRzWzBdKV0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBleHBlY3RlZCBlcnJvcjogc3dhcHBlZCByZWNpcGllbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnQgPSBleHRlcm5hbFJlY2lwaWVudCg5OSk7XG4gICAgICBhc3NlcnRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICgpID0+IGFzc2VydEV4cGVjdGVkT3V0cHV0RGlmZmVyZW5jZShnZXRCYXNlUGFyc2VkVHJhbnNhY3Rpb24ocHNidCwgW3JlY2lwaWVudF0pKSxcbiAgICAgICAgbmV3IEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcihbbWlzc2luZ091dHB1dEVycm9yKHJlY2lwaWVudCksIGltcGxpY2l0T3V0cHV0RXJyb3IocHNidC50eE91dHB1dHNbMF0pXSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGV4cGVjdGVkIGVycm9yOiBtaXNzaW5nIGludGVybmFsIHJlY2lwaWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudCA9IGludGVybmFsUmVjaXBpZW50KDk5KTtcbiAgICAgIGFzc2VydFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgKCkgPT4gYXNzZXJ0RXhwZWN0ZWRPdXRwdXREaWZmZXJlbmNlKGdldEJhc2VQYXJzZWRUcmFuc2FjdGlvbihwc2J0LCBbcmVjaXBpZW50XSkpLFxuICAgICAgICBuZXcgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKFttaXNzaW5nT3V0cHV0RXJyb3IocmVjaXBpZW50KSwgaW1wbGljaXRPdXRwdXRFcnJvcihwc2J0LnR4T3V0cHV0c1swXSldKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9wYXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1QixnREFBc0U7QUFDdEUsc0VBQXdEO0FBRXhELHdFQUdzRDtBQUN0RCxnR0FLa0U7QUFDbEUsZ0dBQXdGO0FBR3hGLHFEQUFrRDtBQUVsRCxNQUFNLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0FBQ25HLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxTQUFTLENBQUM7QUFDcEMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsSUFBQSwrQkFBYyxFQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQztBQU92RSxTQUFTLFlBQVksQ0FBVSxNQUF1QixFQUFFLFVBQStCO0lBQ3JGLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixNQUFNLEVBQUUsSUFBQSxnQ0FBWSxFQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFZO0tBQzFELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxNQUF1QjtJQUNqRCxPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsTUFBdUI7SUFDakQsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUF1QjtJQUMxQyxPQUFPO1FBQ0wsR0FBRyxNQUFN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Q0FBd0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDaEcsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgRGVzY3JpcHRvciwgUHNidCwgZGVzY3JpcHRvcldhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0ICogYXMgdGVzdHV0aWxzIGZyb20gJ0BiaXRnby93YXNtLXV0eG8vdGVzdHV0aWxzJztcblxuaW1wb3J0IHtcbiAgUGFyc2VkT3V0cHV0c0JpZ0ludCxcbiAgdG9CYXNlUGFyc2VkVHJhbnNhY3Rpb25PdXRwdXRzRnJvbVBzYnQsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9kZXNjcmlwdG9yL3BhcnNlJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcixcbiAgYXNzZXJ0RXhwZWN0ZWRPdXRwdXREaWZmZXJlbmNlLFxuICBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLFxuICBFcnJvck1pc3NpbmdPdXRwdXRzLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyB0b0Ftb3VudFR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci9wYXJzZVRvQW1vdW50VHlwZSc7XG5pbXBvcnQgeyBCYXNlT3V0cHV0IH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3R5cGVzJztcblxuaW1wb3J0IHsgZ2V0Rml4dHVyZVJvb3QgfSBmcm9tICcuL2ZpeHR1cmVzLnV0aWxzJztcblxuY29uc3QgeyBnZXREZWZhdWx0WFB1YnMsIGdldERlc2NyaXB0b3IsIGdldERlc2NyaXB0b3JNYXAsIG1vY2tQc2J0RGVmYXVsdCB9ID0gdGVzdHV0aWxzLmRlc2NyaXB0b3I7XG5jb25zdCB7IHRvUGxhaW5PYmplY3QgfSA9IHRlc3R1dGlscztcbmNvbnN0IHsgYXNzZXJ0RXF1YWxGaXh0dXJlIH0gPSBnZXRGaXh0dXJlUm9vdChfX2Rpcm5hbWUgKyAnL2ZpeHR1cmVzJyk7XG5cbnR5cGUgT3V0cHV0V2l0aFZhbHVlPFQgPSBudW1iZXIgfCBiaWdpbnQgfCBzdHJpbmc+ID0ge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB2YWx1ZTogVDtcbn07XG5cbmZ1bmN0aW9uIHRvQmFzZU91dHB1dDxUTnVtYmVyPihvdXRwdXQ6IE91dHB1dFdpdGhWYWx1ZSwgYW1vdW50VHlwZTogJ2JpZ2ludCcgfCAnc3RyaW5nJyk6IEJhc2VPdXRwdXQ8VE51bWJlcj4ge1xuICBhc3NlcnQob3V0cHV0LmFkZHJlc3MpO1xuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgIGFtb3VudDogdG9BbW91bnRUeXBlKG91dHB1dC52YWx1ZSwgYW1vdW50VHlwZSkgYXMgVE51bWJlcixcbiAgfTtcbn1cblxuZnVuY3Rpb24gdG9CYXNlT3V0cHV0QmlnSW50KG91dHB1dDogT3V0cHV0V2l0aFZhbHVlKTogQmFzZU91dHB1dDxiaWdpbnQ+IHtcbiAgcmV0dXJuIHRvQmFzZU91dHB1dChvdXRwdXQsICdiaWdpbnQnKTtcbn1cblxuZnVuY3Rpb24gdG9CYXNlT3V0cHV0U3RyaW5nKG91dHB1dDogT3V0cHV0V2l0aFZhbHVlKTogQmFzZU91dHB1dDxzdHJpbmc+IHtcbiAgcmV0dXJuIHRvQmFzZU91dHB1dChvdXRwdXQsICdzdHJpbmcnKTtcbn1cblxuZnVuY3Rpb24gdG9NYXhPdXRwdXQob3V0cHV0OiBPdXRwdXRXaXRoVmFsdWUpOiBPdXRwdXRXaXRoVmFsdWU8J21heCc+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5vdXRwdXQsXG4gICAgdmFsdWU6ICdtYXgnLFxuICB9O1xufVxuXG5kZXNjcmliZSgncGFyc2UnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRlc2NyaXB0b3JTZWxmID0gZ2V0RGVzY3JpcHRvcignV3NoMk9mMycsIGdldERlZmF1bHRYUHVicygnYScpKTtcbiAgY29uc3QgZGVzY3JpcHRvck90aGVyID0gZ2V0RGVzY3JpcHRvcignV3NoMk9mMycsIGdldERlZmF1bHRYUHVicygnYicpKTtcbiAgY29uc3QgcHNidCA9IG1vY2tQc2J0RGVmYXVsdCh7IGRlc2NyaXB0b3JTZWxmLCBkZXNjcmlwdG9yT3RoZXIgfSk7XG5cbiAgZnVuY3Rpb24gcmVjaXBpZW50KGRlc2NyaXB0b3I6IERlc2NyaXB0b3IsIGluZGV4OiBudW1iZXIsIHZhbHVlID0gMTAwMCkge1xuICAgIHJldHVybiB7IHZhbHVlLCBhZGRyZXNzOiBkZXNjcmlwdG9yV2FsbGV0LmNyZWF0ZUFkZHJlc3NGcm9tRGVzY3JpcHRvcihkZXNjcmlwdG9yLCBpbmRleCwgJ2J0YycpIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcm5hbFJlY2lwaWVudChpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IE91dHB1dFdpdGhWYWx1ZSB7XG4gICAgcmV0dXJuIHJlY2lwaWVudChkZXNjcmlwdG9yU2VsZiwgaW5kZXgsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4dGVybmFsUmVjaXBpZW50KGluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyKTogT3V0cHV0V2l0aFZhbHVlIHtcbiAgICByZXR1cm4gcmVjaXBpZW50KGRlc2NyaXB0b3JPdGhlciwgaW5kZXgsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJhc2VQYXJzZWRUcmFuc2FjdGlvbihwc2J0OiBQc2J0LCByZWNpcGllbnRzOiBPdXRwdXRXaXRoVmFsdWVbXSk6IFBhcnNlZE91dHB1dHNCaWdJbnQge1xuICAgIHJldHVybiB0b0Jhc2VQYXJzZWRUcmFuc2FjdGlvbk91dHB1dHNGcm9tUHNidChcbiAgICAgIHBzYnQsXG4gICAgICBnZXREZXNjcmlwdG9yTWFwKCdXc2gyT2YzJywgZ2V0RGVmYXVsdFhQdWJzKCdhJykpLFxuICAgICAgcmVjaXBpZW50cy5tYXAodG9CYXNlT3V0cHV0U3RyaW5nKSxcbiAgICAgICdidGMnXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHBzYnRPdXRwdXRzID0gcHNidC5nZXRPdXRwdXRzV2l0aEFkZHJlc3MoJ2J0YycpO1xuICBjb25zdCBwc2J0T3V0cHV0MCA9IHBzYnRPdXRwdXRzWzBdO1xuICBjb25zdCBwc2J0T3V0cHV0MSA9IHBzYnRPdXRwdXRzWzFdO1xuXG4gIGRlc2NyaWJlKCd0b0Jhc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgQmFzZVBhcnNlZFRyYW5zYWN0aW9uT3V0cHV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydEVxdWFsRml4dHVyZSgncGFyc2VXaXRob3V0UmVjaXBpZW50cy5qc29uJywgdG9QbGFpbk9iamVjdChnZXRCYXNlUGFyc2VkVHJhbnNhY3Rpb24ocHNidCwgW10pKSk7XG4gICAgICBhd2FpdCBhc3NlcnRFcXVhbEZpeHR1cmUoXG4gICAgICAgICdwYXJzZVdpdGhFeHRlcm5hbFJlY2lwaWVudC5qc29uJyxcbiAgICAgICAgdG9QbGFpbk9iamVjdChnZXRCYXNlUGFyc2VkVHJhbnNhY3Rpb24ocHNidCwgW3BzYnRPdXRwdXQwXSkpXG4gICAgICApO1xuICAgICAgYXdhaXQgYXNzZXJ0RXF1YWxGaXh0dXJlKFxuICAgICAgICAncGFyc2VXaXRoSW50ZXJuYWxSZWNpcGllbnQuanNvbicsXG4gICAgICAgIHRvUGxhaW5PYmplY3QoZ2V0QmFzZVBhcnNlZFRyYW5zYWN0aW9uKHBzYnQsIFtwc2J0T3V0cHV0MV0pKVxuICAgICAgKTtcbiAgICAgIGF3YWl0IGFzc2VydEVxdWFsRml4dHVyZShcbiAgICAgICAgJ3BhcnNlV2l0aEV4dGVybmFsUmVjaXBpZW50Lmpzb24nLFxuICAgICAgICAvLyBtYXggcmVjaXBpZW50OiBpZ25vcmUgYWN0dWFsIHZhbHVlXG4gICAgICAgIHRvUGxhaW5PYmplY3QoZ2V0QmFzZVBhcnNlZFRyYW5zYWN0aW9uKHBzYnQsIFt0b01heE91dHB1dChwc2J0T3V0cHV0MCldKSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhc3NlcnRFcXVhbFZhbGlkYXRpb25FcnJvcihhY3R1YWw6IHVua25vd24sIGV4cGVjdGVkOiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIGZ1bmN0aW9uIG5vcm1FcnJvcnMoZTogRXJyb3JbXSk6IEVycm9yW10ge1xuICAgICAgICByZXR1cm4gZS5tYXAoKGUpID0+ICh7IC4uLmUsIHN0YWNrOiB1bmRlZmluZWQgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKGFjdHVhbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKG5vcm1FcnJvcnMoYWN0dWFsLmVycm9ycyksIG5vcm1FcnJvcnMoZXhwZWN0ZWQuZXJyb3JzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgZXJyb3IgdHlwZTogJyArIGFjdHVhbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXNzZXJ0VmFsaWRhdGlvbkVycm9yKGY6ICgpID0+IHZvaWQsIGV4cGVjdGVkOiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoZiwgKGVycikgPT4ge1xuICAgICAgICBhc3NlcnRFcXVhbFZhbGlkYXRpb25FcnJvcihlcnIsIGV4cGVjdGVkKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbXBsaWNpdE91dHB1dEVycm9yKG91dHB1dDogT3V0cHV0V2l0aFZhbHVlLCB7IGV4dGVybmFsID0gdHJ1ZSB9ID0ge30pOiBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3JJbXBsaWNpdEV4dGVybmFsT3V0cHV0cyhbeyAuLi50b0Jhc2VPdXRwdXRCaWdJbnQob3V0cHV0KSwgZXh0ZXJuYWwgfV0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1pc3NpbmdPdXRwdXRFcnJvcihvdXRwdXQ6IE91dHB1dFdpdGhWYWx1ZSwgeyBleHRlcm5hbCA9IHRydWUgfSA9IHt9KTogRXJyb3JNaXNzaW5nT3V0cHV0cyB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yTWlzc2luZ091dHB1dHMoW3sgLi4udG9CYXNlT3V0cHV0QmlnSW50KG91dHB1dCksIGV4dGVybmFsIH1dKTtcbiAgICB9XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGV4cGVjdGVkIGVycm9yOiBubyByZWNpcGllbnQgcmVxdWVzdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAoKSA9PiBhc3NlcnRFeHBlY3RlZE91dHB1dERpZmZlcmVuY2UoZ2V0QmFzZVBhcnNlZFRyYW5zYWN0aW9uKHBzYnQsIFtdKSksXG4gICAgICAgIG5ldyBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IoW2ltcGxpY2l0T3V0cHV0RXJyb3IocHNidE91dHB1dDApXSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGV4cGVjdGVkIGVycm9yOiBvbmx5IGludGVybmFsIHJlY2lwaWVudCByZXF1ZXN0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICgpID0+IGFzc2VydEV4cGVjdGVkT3V0cHV0RGlmZmVyZW5jZShnZXRCYXNlUGFyc2VkVHJhbnNhY3Rpb24ocHNidCwgW3BzYnRPdXRwdXQxXSkpLFxuICAgICAgICBuZXcgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKFtpbXBsaWNpdE91dHB1dEVycm9yKHBzYnRPdXRwdXQwKV0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBleHBlY3RlZCBlcnJvcjogb25seSBpbnRlcm5hbCBtYXggcmVjaXBpZW50IHJlcXVlc3RlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgKCkgPT4gYXNzZXJ0RXhwZWN0ZWRPdXRwdXREaWZmZXJlbmNlKGdldEJhc2VQYXJzZWRUcmFuc2FjdGlvbihwc2J0LCBbdG9NYXhPdXRwdXQocHNidE91dHB1dDEpXSkpLFxuICAgICAgICBuZXcgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKFtpbXBsaWNpdE91dHB1dEVycm9yKHBzYnRPdXRwdXQwKV0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBleHBlY3RlZCBlcnJvcjogc3dhcHBlZCByZWNpcGllbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnQgPSBleHRlcm5hbFJlY2lwaWVudCg5OSk7XG4gICAgICBhc3NlcnRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICgpID0+IGFzc2VydEV4cGVjdGVkT3V0cHV0RGlmZmVyZW5jZShnZXRCYXNlUGFyc2VkVHJhbnNhY3Rpb24ocHNidCwgW3JlY2lwaWVudF0pKSxcbiAgICAgICAgbmV3IEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcihbbWlzc2luZ091dHB1dEVycm9yKHJlY2lwaWVudCksIGltcGxpY2l0T3V0cHV0RXJyb3IocHNidE91dHB1dDApXSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGV4cGVjdGVkIGVycm9yOiBtaXNzaW5nIGludGVybmFsIHJlY2lwaWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudCA9IGludGVybmFsUmVjaXBpZW50KDk5KTtcbiAgICAgIGFzc2VydFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgKCkgPT4gYXNzZXJ0RXhwZWN0ZWRPdXRwdXREaWZmZXJlbmNlKGdldEJhc2VQYXJzZWRUcmFuc2FjdGlvbihwc2J0LCBbcmVjaXBpZW50XSkpLFxuICAgICAgICBuZXcgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKFttaXNzaW5nT3V0cHV0RXJyb3IocmVjaXBpZW50KSwgaW1wbGljaXRPdXRwdXRFcnJvcihwc2J0T3V0cHV0MCldKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -1,32 +1,76 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = 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);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
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
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
const assert_1 = __importDefault(require("assert"));
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
40
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
41
|
+
const testutils = __importStar(require("@bitgo/wasm-utxo/testutils"));
|
|
42
|
+
const descriptor_1 = require("../../../../src/transaction/descriptor");
|
|
10
43
|
const signPsbt_1 = require("../../../../src/transaction/descriptor/signPsbt");
|
|
44
|
+
const { getDescriptorMap, mockPsbtDefaultWithDescriptorTemplate } = testutils.descriptor;
|
|
45
|
+
function assertInputHasValidSignatures(psbt, inputIndex) {
|
|
46
|
+
(0, assert_1.default)(psbt.hasPartialSignatures(inputIndex));
|
|
47
|
+
const partialSigs = psbt.getPartialSignatures(inputIndex);
|
|
48
|
+
(0, assert_1.default)(partialSigs.length > 0);
|
|
49
|
+
for (const sig of partialSigs) {
|
|
50
|
+
(0, assert_1.default)(psbt.validateSignatureAtInput(inputIndex, sig.pubkey));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
11
53
|
describe('sign', function () {
|
|
12
|
-
const psbtUnsigned =
|
|
13
|
-
const keychain =
|
|
14
|
-
const descriptorMap =
|
|
54
|
+
const psbtUnsigned = mockPsbtDefaultWithDescriptorTemplate('Wsh2Of3');
|
|
55
|
+
const keychain = testutils.getKeyTriple('a');
|
|
56
|
+
const descriptorMap = getDescriptorMap('Wsh2Of3', keychain);
|
|
15
57
|
const emptyDescriptorMap = new Map();
|
|
16
58
|
it('should sign a transaction', async function () {
|
|
17
|
-
const psbt = psbtUnsigned.
|
|
18
|
-
(0,
|
|
19
|
-
(
|
|
59
|
+
const psbt = wasm_utxo_1.Psbt.deserialize(psbtUnsigned.serialize());
|
|
60
|
+
(0, descriptor_1.signPsbt)(psbt, descriptorMap, keychain[0], { onUnknownInput: 'throw' });
|
|
61
|
+
assertInputHasValidSignatures(psbt, 0);
|
|
62
|
+
assertInputHasValidSignatures(psbt, 1);
|
|
20
63
|
});
|
|
21
64
|
it('should be sensitive to onUnknownInput', async function () {
|
|
22
|
-
const psbt = psbtUnsigned.
|
|
65
|
+
const psbt = wasm_utxo_1.Psbt.deserialize(psbtUnsigned.serialize());
|
|
23
66
|
assert_1.default.throws(() => {
|
|
24
|
-
(0,
|
|
67
|
+
(0, descriptor_1.signPsbt)(psbt, emptyDescriptorMap, keychain[0], { onUnknownInput: 'throw' });
|
|
25
68
|
}, new signPsbt_1.ErrorUnknownInput(0));
|
|
26
|
-
(0,
|
|
27
|
-
(0, assert_1.default)(psbt.
|
|
28
|
-
(0,
|
|
29
|
-
(
|
|
69
|
+
(0, descriptor_1.signPsbt)(psbt, emptyDescriptorMap, keychain[0], { onUnknownInput: 'skip' });
|
|
70
|
+
(0, assert_1.default)(!psbt.hasPartialSignatures(0));
|
|
71
|
+
(0, descriptor_1.signPsbt)(psbt, emptyDescriptorMap, keychain[0], { onUnknownInput: 'sign' });
|
|
72
|
+
assertInputHasValidSignatures(psbt, 0);
|
|
73
|
+
assertInputHasValidSignatures(psbt, 1);
|
|
30
74
|
});
|
|
31
75
|
});
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbi9kZXNjcmlwdG9yL3NpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsZ0RBQXdDO0FBQ3hDLHNFQUF3RDtBQUV4RCx1RUFBa0U7QUFDbEUsOEVBQW9GO0FBRXBGLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxxQ0FBcUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7QUFFekYsU0FBUyw2QkFBNkIsQ0FBQyxJQUFVLEVBQUUsVUFBa0I7SUFDbkUsSUFBQSxnQkFBTSxFQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxRCxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQixLQUFLLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzlCLElBQUEsZ0JBQU0sRUFBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7QUFDSCxDQUFDO0FBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRTtJQUNmLE1BQU0sWUFBWSxHQUFHLHFDQUFxQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVyQyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsS0FBSztRQUNuQyxNQUFNLElBQUksR0FBRyxnQkFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFBLHFCQUFRLEVBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RSw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUs7UUFDL0MsTUFBTSxJQUFJLEdBQUcsZ0JBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDeEQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2pCLElBQUEscUJBQVEsRUFBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDL0UsQ0FBQyxFQUFFLElBQUksNEJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixJQUFBLHFCQUFRLEVBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUEsZ0JBQU0sRUFBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUEscUJBQVEsRUFBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUUsNkJBQTZCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLDZCQUE2QixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBQc2J0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgKiBhcyB0ZXN0dXRpbHMgZnJvbSAnQGJpdGdvL3dhc20tdXR4by90ZXN0dXRpbHMnO1xuXG5pbXBvcnQgeyBzaWduUHNidCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9kZXNjcmlwdG9yJztcbmltcG9ydCB7IEVycm9yVW5rbm93bklucHV0IH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2Rlc2NyaXB0b3Ivc2lnblBzYnQnO1xuXG5jb25zdCB7IGdldERlc2NyaXB0b3JNYXAsIG1vY2tQc2J0RGVmYXVsdFdpdGhEZXNjcmlwdG9yVGVtcGxhdGUgfSA9IHRlc3R1dGlscy5kZXNjcmlwdG9yO1xuXG5mdW5jdGlvbiBhc3NlcnRJbnB1dEhhc1ZhbGlkU2lnbmF0dXJlcyhwc2J0OiBQc2J0LCBpbnB1dEluZGV4OiBudW1iZXIpIHtcbiAgYXNzZXJ0KHBzYnQuaGFzUGFydGlhbFNpZ25hdHVyZXMoaW5wdXRJbmRleCkpO1xuICBjb25zdCBwYXJ0aWFsU2lncyA9IHBzYnQuZ2V0UGFydGlhbFNpZ25hdHVyZXMoaW5wdXRJbmRleCk7XG4gIGFzc2VydChwYXJ0aWFsU2lncy5sZW5ndGggPiAwKTtcbiAgZm9yIChjb25zdCBzaWcgb2YgcGFydGlhbFNpZ3MpIHtcbiAgICBhc3NlcnQocHNidC52YWxpZGF0ZVNpZ25hdHVyZUF0SW5wdXQoaW5wdXRJbmRleCwgc2lnLnB1YmtleSkpO1xuICB9XG59XG5cbmRlc2NyaWJlKCdzaWduJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwc2J0VW5zaWduZWQgPSBtb2NrUHNidERlZmF1bHRXaXRoRGVzY3JpcHRvclRlbXBsYXRlKCdXc2gyT2YzJyk7XG4gIGNvbnN0IGtleWNoYWluID0gdGVzdHV0aWxzLmdldEtleVRyaXBsZSgnYScpO1xuICBjb25zdCBkZXNjcmlwdG9yTWFwID0gZ2V0RGVzY3JpcHRvck1hcCgnV3NoMk9mMycsIGtleWNoYWluKTtcbiAgY29uc3QgZW1wdHlEZXNjcmlwdG9yTWFwID0gbmV3IE1hcCgpO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBzYnQgPSBQc2J0LmRlc2VyaWFsaXplKHBzYnRVbnNpZ25lZC5zZXJpYWxpemUoKSk7XG4gICAgc2lnblBzYnQocHNidCwgZGVzY3JpcHRvck1hcCwga2V5Y2hhaW5bMF0sIHsgb25Vbmtub3duSW5wdXQ6ICd0aHJvdycgfSk7XG4gICAgYXNzZXJ0SW5wdXRIYXNWYWxpZFNpZ25hdHVyZXMocHNidCwgMCk7XG4gICAgYXNzZXJ0SW5wdXRIYXNWYWxpZFNpZ25hdHVyZXMocHNidCwgMSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYmUgc2Vuc2l0aXZlIHRvIG9uVW5rbm93bklucHV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBzYnQgPSBQc2J0LmRlc2VyaWFsaXplKHBzYnRVbnNpZ25lZC5zZXJpYWxpemUoKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICBzaWduUHNidChwc2J0LCBlbXB0eURlc2NyaXB0b3JNYXAsIGtleWNoYWluWzBdLCB7IG9uVW5rbm93bklucHV0OiAndGhyb3cnIH0pO1xuICAgIH0sIG5ldyBFcnJvclVua25vd25JbnB1dCgwKSk7XG4gICAgc2lnblBzYnQocHNidCwgZW1wdHlEZXNjcmlwdG9yTWFwLCBrZXljaGFpblswXSwgeyBvblVua25vd25JbnB1dDogJ3NraXAnIH0pO1xuICAgIGFzc2VydCghcHNidC5oYXNQYXJ0aWFsU2lnbmF0dXJlcygwKSk7XG4gICAgc2lnblBzYnQocHNidCwgZW1wdHlEZXNjcmlwdG9yTWFwLCBrZXljaGFpblswXSwgeyBvblVua25vd25JbnB1dDogJ3NpZ24nIH0pO1xuICAgIGFzc2VydElucHV0SGFzVmFsaWRTaWduYXR1cmVzKHBzYnQsIDApO1xuICAgIGFzc2VydElucHV0SGFzVmFsaWRTaWduYXR1cmVzKHBzYnQsIDEpO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -1,15 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = 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);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
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
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
const assert_1 = __importDefault(require("assert"));
|
|
7
|
-
const
|
|
8
|
-
const descriptor_1 = require("../../../../../utxo-core/src/testutil/descriptor");
|
|
40
|
+
const testutils = __importStar(require("@bitgo/wasm-utxo/testutils"));
|
|
9
41
|
const validatePolicy_1 = require("../../../../src/descriptor/validatePolicy");
|
|
10
|
-
const
|
|
42
|
+
const descriptor_1 = require("../../../../src/descriptor");
|
|
43
|
+
const { getDescriptor } = testutils.descriptor;
|
|
11
44
|
function testAssertDescriptorPolicy(ds, p, k, expectedError) {
|
|
12
|
-
const f = () => (0, validatePolicy_1.assertDescriptorPolicy)(ds.map((d) => (0,
|
|
45
|
+
const f = () => (0, validatePolicy_1.assertDescriptorPolicy)(ds.map((d) => (0, descriptor_1.toNamedDescriptorNative)(d, 'derivable')), p, k);
|
|
13
46
|
if (expectedError) {
|
|
14
47
|
assert_1.default.throws(f);
|
|
15
48
|
}
|
|
@@ -18,9 +51,9 @@ function testAssertDescriptorPolicy(ds, p, k, expectedError) {
|
|
|
18
51
|
}
|
|
19
52
|
}
|
|
20
53
|
describe('assertDescriptorPolicy', function () {
|
|
21
|
-
const keys =
|
|
54
|
+
const keys = testutils.getKeyTriple('default');
|
|
22
55
|
function getNamedDescriptorSigned(name) {
|
|
23
|
-
return (0,
|
|
56
|
+
return (0, descriptor_1.createNamedDescriptorWithSignature)(name, getDescriptor(name), keys[0]);
|
|
24
57
|
}
|
|
25
58
|
function getNamedDescriptor(name) {
|
|
26
59
|
return stripSignature(getNamedDescriptorSigned(name));
|
|
@@ -35,14 +68,14 @@ describe('assertDescriptorPolicy', function () {
|
|
|
35
68
|
testAssertDescriptorPolicy([getNamedDescriptor('Wsh2Of3CltvDrop')], (0, validatePolicy_1.getPolicyForEnv)('prod'), keys, null);
|
|
36
69
|
// does not allow mixed descriptors
|
|
37
70
|
testAssertDescriptorPolicy([getNamedDescriptor('Wsh2Of3'), getNamedDescriptor('Wsh2Of3CltvDrop')], (0, validatePolicy_1.getPolicyForEnv)('prod'), keys, new validatePolicy_1.DescriptorPolicyValidationError([
|
|
38
|
-
(0,
|
|
39
|
-
(0,
|
|
71
|
+
(0, descriptor_1.toNamedDescriptorNative)(getNamedDescriptor('Wsh2Of3'), 'derivable'),
|
|
72
|
+
(0, descriptor_1.toNamedDescriptorNative)(getNamedDescriptor('Wsh2Of3CltvDrop'), 'derivable'),
|
|
40
73
|
], (0, validatePolicy_1.getPolicyForEnv)('prod')));
|
|
41
74
|
// prod only allows other descriptors if they are signed by the user key
|
|
42
75
|
testAssertDescriptorPolicy([getNamedDescriptorSigned('Wsh2Of2')], (0, validatePolicy_1.getPolicyForEnv)('prod'), keys, null);
|
|
43
|
-
testAssertDescriptorPolicy([getNamedDescriptor('Wsh2Of2')], (0, validatePolicy_1.getPolicyForEnv)('prod'), keys, new validatePolicy_1.DescriptorPolicyValidationError([(0,
|
|
76
|
+
testAssertDescriptorPolicy([getNamedDescriptor('Wsh2Of2')], (0, validatePolicy_1.getPolicyForEnv)('prod'), keys, new validatePolicy_1.DescriptorPolicyValidationError([(0, descriptor_1.toNamedDescriptorNative)(getNamedDescriptor('Wsh2Of2'), 'derivable')], (0, validatePolicy_1.getPolicyForEnv)('prod')));
|
|
44
77
|
// test is very permissive by default
|
|
45
78
|
testAssertDescriptorPolicy([stripSignature(getNamedDescriptor('Wsh2Of2'))], (0, validatePolicy_1.getPolicyForEnv)('test'), keys, null);
|
|
46
79
|
});
|
|
47
80
|
});
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92YWxpZGF0ZVBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUk1QixzRUFBd0Q7QUFFeEQsOEVBTW1EO0FBQ25ELDJEQUlvQztBQUdwQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztBQUUvQyxTQUFTLDBCQUEwQixDQUNqQyxFQUE2QixFQUM3QixDQUE2QixFQUM3QixDQUErQixFQUMvQixhQUFxRDtJQUVyRCxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FDYixJQUFBLHVDQUFzQixFQUNwQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLG9DQUF1QixFQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUN0RCxDQUFDLEVBQ0QsQ0FBQyxDQUNGLENBQUM7SUFDSixJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLGdCQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7U0FBTSxDQUFDO1FBQ04sZ0JBQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQztBQUNILENBQUM7QUFFRCxRQUFRLENBQUMsd0JBQXdCLEVBQUU7SUFDakMsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxTQUFTLHdCQUF3QixDQUFDLElBQXdCO1FBQ3hELE9BQU8sSUFBQSwrQ0FBa0MsRUFBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFDRCxTQUFTLGtCQUFrQixDQUFDLElBQXdCO1FBQ2xELE9BQU8sY0FBYyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFNBQVMsY0FBYyxDQUFDLENBQWtCO1FBQ3hDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELEVBQUUsQ0FBQyxxQkFBcUIsRUFBRTtRQUN4QiwwQkFBMEIsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBQSwrQ0FBOEIsRUFBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFbkgsK0NBQStDO1FBQy9DLDBCQUEwQixDQUFDLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFBLGdDQUFlLEVBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pHLDBCQUEwQixDQUFDLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUEsZ0NBQWUsRUFBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFekcsbUNBQW1DO1FBQ25DLDBCQUEwQixDQUN4QixDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFDdEUsSUFBQSxnQ0FBZSxFQUFDLE1BQU0sQ0FBQyxFQUN2QixJQUFJLEVBQ0osSUFBSSxnREFBK0IsQ0FDakM7WUFDRSxJQUFBLG9DQUF1QixFQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVcsQ0FBQztZQUNuRSxJQUFBLG9DQUF1QixFQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsV0FBVyxDQUFDO1NBQzVFLEVBQ0QsSUFBQSxnQ0FBZSxFQUFDLE1BQU0sQ0FBQyxDQUN4QixDQUNGLENBQUM7UUFFRix3RUFBd0U7UUFDeEUsMEJBQTBCLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUEsZ0NBQWUsRUFBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkcsMEJBQTBCLENBQ3hCLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDL0IsSUFBQSxnQ0FBZSxFQUFDLE1BQU0sQ0FBQyxFQUN2QixJQUFJLEVBQ0osSUFBSSxnREFBK0IsQ0FDakMsQ0FBQyxJQUFBLG9DQUF1QixFQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQ3JFLElBQUEsZ0NBQWUsRUFBQyxNQUFNLENBQUMsQ0FDeEIsQ0FDRixDQUFDO1FBRUYscUNBQXFDO1FBQ3JDLDBCQUEwQixDQUFDLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFBLGdDQUFlLEVBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0ICogYXMgdGVzdHV0aWxzIGZyb20gJ0BiaXRnby93YXNtLXV0eG8vdGVzdHV0aWxzJztcblxuaW1wb3J0IHtcbiAgYXNzZXJ0RGVzY3JpcHRvclBvbGljeSxcbiAgRGVzY3JpcHRvclBvbGljeVZhbGlkYXRpb25FcnJvcixcbiAgRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3ksXG4gIGdldFBvbGljeUZvckVudixcbiAgZ2V0VmFsaWRhdG9yRGVzY3JpcHRvclRlbXBsYXRlLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci92YWxpZGF0ZVBvbGljeSc7XG5pbXBvcnQge1xuICBOYW1lZERlc2NyaXB0b3IsXG4gIGNyZWF0ZU5hbWVkRGVzY3JpcHRvcldpdGhTaWduYXR1cmUsXG4gIHRvTmFtZWREZXNjcmlwdG9yTmF0aXZlLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvcic7XG5cbnR5cGUgRGVzY3JpcHRvclRlbXBsYXRlID0gdGVzdHV0aWxzLmRlc2NyaXB0b3IuRGVzY3JpcHRvclRlbXBsYXRlO1xuY29uc3QgeyBnZXREZXNjcmlwdG9yIH0gPSB0ZXN0dXRpbHMuZGVzY3JpcHRvcjtcblxuZnVuY3Rpb24gdGVzdEFzc2VydERlc2NyaXB0b3JQb2xpY3koXG4gIGRzOiBOYW1lZERlc2NyaXB0b3I8c3RyaW5nPltdLFxuICBwOiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSxcbiAgazogVHJpcGxlPGJpcDMyLkJJUDMySW50ZXJmYWNlPixcbiAgZXhwZWN0ZWRFcnJvcjogRGVzY3JpcHRvclBvbGljeVZhbGlkYXRpb25FcnJvciB8IG51bGxcbikge1xuICBjb25zdCBmID0gKCkgPT5cbiAgICBhc3NlcnREZXNjcmlwdG9yUG9saWN5KFxuICAgICAgZHMubWFwKChkKSA9PiB0b05hbWVkRGVzY3JpcHRvck5hdGl2ZShkLCAnZGVyaXZhYmxlJykpLFxuICAgICAgcCxcbiAgICAgIGtcbiAgICApO1xuICBpZiAoZXhwZWN0ZWRFcnJvcikge1xuICAgIGFzc2VydC50aHJvd3MoZik7XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmKTtcbiAgfVxufVxuXG5kZXNjcmliZSgnYXNzZXJ0RGVzY3JpcHRvclBvbGljeScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qga2V5cyA9IHRlc3R1dGlscy5nZXRLZXlUcmlwbGUoJ2RlZmF1bHQnKTtcbiAgZnVuY3Rpb24gZ2V0TmFtZWREZXNjcmlwdG9yU2lnbmVkKG5hbWU6IERlc2NyaXB0b3JUZW1wbGF0ZSk6IE5hbWVkRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIGNyZWF0ZU5hbWVkRGVzY3JpcHRvcldpdGhTaWduYXR1cmUobmFtZSwgZ2V0RGVzY3JpcHRvcihuYW1lKSwga2V5c1swXSk7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0TmFtZWREZXNjcmlwdG9yKG5hbWU6IERlc2NyaXB0b3JUZW1wbGF0ZSk6IE5hbWVkRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIHN0cmlwU2lnbmF0dXJlKGdldE5hbWVkRGVzY3JpcHRvclNpZ25lZChuYW1lKSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdHJpcFNpZ25hdHVyZShkOiBOYW1lZERlc2NyaXB0b3IpOiBOYW1lZERlc2NyaXB0b3Ige1xuICAgIHJldHVybiB7IC4uLmQsIHNpZ25hdHVyZXM6IHVuZGVmaW5lZCB9O1xuICB9XG5cbiAgaXQoJ2hhcyBleHBlY3RlZCByZXN1bHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGVzdEFzc2VydERlc2NyaXB0b3JQb2xpY3koW2dldE5hbWVkRGVzY3JpcHRvcignV3NoMk9mMycpXSwgZ2V0VmFsaWRhdG9yRGVzY3JpcHRvclRlbXBsYXRlKCdXc2gyT2YzJyksIGtleXMsIG51bGwpO1xuXG4gICAgLy8gcHJvZCBkb2VzIG9ubHkgYWxsb3cgV3NoMk9mMy1pc2ggZGVzY3JpcHRvcnNcbiAgICB0ZXN0QXNzZXJ0RGVzY3JpcHRvclBvbGljeShbZ2V0TmFtZWREZXNjcmlwdG9yKCdXc2gyT2YzJyldLCBnZXRQb2xpY3lGb3JFbnYoJ3Byb2QnKSwga2V5cywgbnVsbCk7XG4gICAgdGVzdEFzc2VydERlc2NyaXB0b3JQb2xpY3koW2dldE5hbWVkRGVzY3JpcHRvcignV3NoMk9mM0NsdHZEcm9wJyldLCBnZXRQb2xpY3lGb3JFbnYoJ3Byb2QnKSwga2V5cywgbnVsbCk7XG5cbiAgICAvLyBkb2VzIG5vdCBhbGxvdyBtaXhlZCBkZXNjcmlwdG9yc1xuICAgIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KFxuICAgICAgW2dldE5hbWVkRGVzY3JpcHRvcignV3NoMk9mMycpLCBnZXROYW1lZERlc2NyaXB0b3IoJ1dzaDJPZjNDbHR2RHJvcCcpXSxcbiAgICAgIGdldFBvbGljeUZvckVudigncHJvZCcpLFxuICAgICAga2V5cyxcbiAgICAgIG5ldyBEZXNjcmlwdG9yUG9saWN5VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBbXG4gICAgICAgICAgdG9OYW1lZERlc2NyaXB0b3JOYXRpdmUoZ2V0TmFtZWREZXNjcmlwdG9yKCdXc2gyT2YzJyksICdkZXJpdmFibGUnKSxcbiAgICAgICAgICB0b05hbWVkRGVzY3JpcHRvck5hdGl2ZShnZXROYW1lZERlc2NyaXB0b3IoJ1dzaDJPZjNDbHR2RHJvcCcpLCAnZGVyaXZhYmxlJyksXG4gICAgICAgIF0sXG4gICAgICAgIGdldFBvbGljeUZvckVudigncHJvZCcpXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIHByb2Qgb25seSBhbGxvd3Mgb3RoZXIgZGVzY3JpcHRvcnMgaWYgdGhleSBhcmUgc2lnbmVkIGJ5IHRoZSB1c2VyIGtleVxuICAgIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KFtnZXROYW1lZERlc2NyaXB0b3JTaWduZWQoJ1dzaDJPZjInKV0sIGdldFBvbGljeUZvckVudigncHJvZCcpLCBrZXlzLCBudWxsKTtcbiAgICB0ZXN0QXNzZXJ0RGVzY3JpcHRvclBvbGljeShcbiAgICAgIFtnZXROYW1lZERlc2NyaXB0b3IoJ1dzaDJPZjInKV0sXG4gICAgICBnZXRQb2xpY3lGb3JFbnYoJ3Byb2QnKSxcbiAgICAgIGtleXMsXG4gICAgICBuZXcgRGVzY3JpcHRvclBvbGljeVZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgW3RvTmFtZWREZXNjcmlwdG9yTmF0aXZlKGdldE5hbWVkRGVzY3JpcHRvcignV3NoMk9mMicpLCAnZGVyaXZhYmxlJyldLFxuICAgICAgICBnZXRQb2xpY3lGb3JFbnYoJ3Byb2QnKVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyB0ZXN0IGlzIHZlcnkgcGVybWlzc2l2ZSBieSBkZWZhdWx0XG4gICAgdGVzdEFzc2VydERlc2NyaXB0b3JQb2xpY3koW3N0cmlwU2lnbmF0dXJlKGdldE5hbWVkRGVzY3JpcHRvcignV3NoMk9mMicpKV0sIGdldFBvbGljeUZvckVudigndGVzdCcpLCBrZXlzLCBudWxsKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -82,7 +82,7 @@ function getChangeInfoFromPsbt(psbt) {
|
|
|
82
82
|
const path = derivations[0].path;
|
|
83
83
|
const { chain, index } = utxolib.bitgo.getChainAndIndexFromPath(path);
|
|
84
84
|
return {
|
|
85
|
-
address:
|
|
85
|
+
address: wasm_utxo_1.address.fromOutputScriptWithCoin(psbt.txOutputs[i].script, (0, names_1.getCoinName)(psbt.network)),
|
|
86
86
|
chain,
|
|
87
87
|
index,
|
|
88
88
|
};
|
|
@@ -284,4 +284,4 @@ function describeTransaction(backend, filter = () => true) {
|
|
|
284
284
|
}
|
|
285
285
|
describeTransaction('utxolib');
|
|
286
286
|
describeTransaction('wasm');
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3BhcnNlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUF3QztBQUV4Qyw2Q0FBK0I7QUFDL0IseURBQTJDO0FBQzNDLDhDQUE2RjtBQUM3RixnREFBcUQ7QUFFckQsK0ZBQTRGO0FBRzVGLHFDQUF5QztBQUN6Qyx5RUFBd0c7QUFLeEcsaURBQW9EO0FBR3BELFNBQVMsMEJBQTBCLENBQ2pDLFdBQW1DLEVBQ25DLEVBQUUsMkJBQTJCLEVBQTRDO0lBS3pFLGlGQUFpRjtJQUNqRixNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakYsSUFBSSxlQUFlLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXRHLElBQUksYUFBaUMsQ0FBQztJQUN0QyxJQUFJLDJCQUEyQixFQUFFLENBQUM7UUFDaEMsZ0RBQWdEO1FBQ2hELEVBQUU7UUFDRiwwRUFBMEU7UUFDMUUsc0RBQXNEO1FBQ3RELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxhQUFhLEdBQUcsY0FBYyxDQUFD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QUFDLENBQUM7QUFDL0IsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IFdhbGxldCwgVmVyaWZpY2F0aW9uT3B0aW9ucywgSVRyYW5zYWN0aW9uUmVjaXBpZW50LCBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgcGFyc2VUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFBhcnNlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3R5cGVzJztcbmltcG9ydCB7IFV0eG9XYWxsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvd2FsbGV0JztcbmltcG9ydCB7IGdldFV0eG9Db2luIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBleHBsYWluTGVnYWN5VHgsIGV4cGxhaW5Qc2J0LCBleHBsYWluUHNidFdhc20gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQnO1xuaW1wb3J0IHR5cGUge1xuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBDaGFuZ2VBZGRyZXNzSW5mbyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZXRDb2luTmFtZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblByZWJ1aWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2Fic3RyYWN0VXR4b0NvaW4nO1xuXG5mdW5jdGlvbiBnZXRUeFBhcmFtc0Zyb21FeHBsYW5hdGlvbihcbiAgZXhwbGFuYXRpb246IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIHsgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzIH06IHsgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzOiBib29sZWFuIH1cbik6IHtcbiAgcmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gIGNoYW5nZUFkZHJlc3M/OiBzdHJpbmc7XG59IHtcbiAgLy8gVGhlIGV4dGVybmFsIG91dHB1dHMgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGluIG91dHB1dHMgYnV0IG5vdCBpbiBjaGFuZ2VPdXRwdXRzXG4gIGNvbnN0IGNoYW5nZUFkZHJlc3NlcyA9IG5ldyBTZXQoZXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5tYXAoKG8pID0+IG8uYWRkcmVzcykpO1xuICBsZXQgZXh0ZXJuYWxPdXRwdXRzID0gZXhwbGFuYXRpb24ub3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uYWRkcmVzcyAmJiAhY2hhbmdlQWRkcmVzc2VzLmhhcyhvLmFkZHJlc3MpKTtcblxuICBsZXQgY2hhbmdlQWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAoZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzKSB7XG4gICAgLy8gY29udmVydCBhbiBleHRlcm5hbCBvdXRwdXQgdG8gYSBjaGFuZ2Ugb3V0cHV0XG4gICAgLy9cbiAgICAvLyBpbiBjb21iaW5hdGlvbiB3aXRoIGFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzLCB0aGlzIGFsbG93cyBhbiBleHRlcm5hbFxuICAgIC8vIG91dHB1dCBvbiB0aGUgdHJhbnNhY3Rpb24gd2l0aG91dCBhIHNpemUgY29uc3RyYWludFxuICAgIGNvbnN0IGV4dGVybmFsT3V0cHV0ID0gZXh0ZXJuYWxPdXRwdXRzWzBdO1xuICAgIGlmICghZXh0ZXJuYWxPdXRwdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gZXh0ZXJuYWwgb3V0cHV0IGZvdW5kJyk7XG4gICAgfVxuICAgIGNoYW5nZUFkZHJlc3MgPSBleHRlcm5hbE91dHB1dC5hZGRyZXNzO1xuICAgIGV4dGVybmFsT3V0cHV0cyA9IGV4dGVybmFsT3V0cHV0cy5zbGljZSgxKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVjaXBpZW50czogZXh0ZXJuYWxPdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzISxcbiAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudCxcbiAgICB9KSksXG4gICAgY2hhbmdlQWRkcmVzcyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhbmdlSW5mb0Zyb21Qc2J0KHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQpOiBDaGFuZ2VBZGRyZXNzSW5mb1tdIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5maW5kSW50ZXJuYWxPdXRwdXRJbmRpY2VzKHBzYnQpLm1hcCgoaSkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gcHNidC5kYXRhLm91dHB1dHNbaV07XG4gICAgICBjb25zdCBkZXJpdmF0aW9ucyA9IG91dHB1dC5iaXAzMkRlcml2YXRpb24gPz8gb3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbiA/PyB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWRlcml2YXRpb25zIHx8IGRlcml2YXRpb25zLmxlbmd0aCAhPT0gMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDMgZGVyaXZhdGlvbiBwYXRocycpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF0aCA9IGRlcml2YXRpb25zWzBdLnBhdGg7XG4gICAgICBjb25zdCB7IGNoYWluLCBpbmRleCB9ID0gdXR4b2xpYi5iaXRnby5nZXRDaGFpbkFuZEluZGV4RnJvbVBhdGgocGF0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhZGRyZXNzOiB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChwc2J0LnR4T3V0cHV0c1tpXS5zY3JpcHQsIHBzYnQubmV0d29yayksXG4gICAgICAgIGNoYWluLFxuICAgICAgICBpbmRleCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uRXJyb3JOb011bHRpU2lnSW5wdXRGb3VuZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKFxuICBhY2lkVGVzdDogdXR4b2xpYi50ZXN0dXRpbC5BY2lkVGVzdCxcbiAgbGFiZWw6IHN0cmluZyxcbiAgYmFja2VuZDogJ3V0eG9saWInIHwgJ3dhc20nLFxuICB7XG4gICAgdHhQYXJhbXMsXG4gICAgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzID0gZmFsc2UsXG4gICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQsXG4gICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQsXG4gICAgdHhGb3JtYXQgPSAncHNidCcsXG4gIH06IHtcbiAgICB0eFBhcmFtczpcbiAgICAgIHwge1xuICAgICAgICAgIHJlY2lwaWVudHM6IElUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByYmZUeElkczogc3RyaW5nW107XG4gICAgICAgIH1cbiAgICAgIHwgJ2luZmVyRnJvbUV4cGxhbmF0aW9uJztcbiAgICBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3M/OiBib29sZWFuO1xuICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiBiaWdpbnQ7XG4gICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IGJpZ2ludDtcbiAgICB0eEZvcm1hdD86ICdwc2J0JyB8ICdsZWdhY3knO1xuICB9XG4pIHtcbiAgZGVzY3JpYmUoYCR7YWNpZFRlc3QubmFtZX0vJHtsYWJlbH1gLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHJlZlBhcnNlZFRyYW5zYWN0aW9uOiBQYXJzZWRUcmFuc2FjdGlvbjxiaWdpbnQ+O1xuICAgIGxldCBjb2luOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRVdHhvQ29pbj47XG4gICAgbGV0IG1vY2tXYWxsZXQ6IHNpbm9uLlNpbm9uU3R1YmJlZEluc3RhbmNlPFdhbGxldD47XG4gICAgbGV0IHN0dWJFeHBsYWluVHJhbnNhY3Rpb246IHNpbm9uLlNpbm9uU3R1YjtcblxuICAgIGJlZm9yZSgncHJlcGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvaW5OYW1lID0gZ2V0Q29pbk5hbWUoYWNpZFRlc3QubmV0d29yayk7XG4gICAgICBjb2luID0gZ2V0VXR4b0NvaW4oY29pbk5hbWUpO1xuXG4gICAgICAvLyBDcmVhdGUgUFNCVCBhbmQgZXhwbGFuYXRpb25cbiAgICAgIGNvbnN0IHBzYnQgPSBhY2lkVGVzdC5jcmVhdGVQc2J0KCk7XG4gICAgICBjb25zdCB0eCA9IHBzYnQuZ2V0VW5zaWduZWRUeCgpO1xuICAgICAgY29uc3QgdHhIYXNoID0gdHguZ2V0SWQoKTtcblxuICAgICAgbGV0IGV4cGxhbmF0aW9uOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICAgICAgaWYgKHR4Rm9ybWF0ID09PSAncHNidCcpIHtcbiAgICAgICAgaWYgKGJhY2tlbmQgPT09ICd1dHhvbGliJykge1xuICAgICAgICAgIGV4cGxhbmF0aW9uID0gZXhwbGFpblBzYnQocHNidCwgeyBwdWJzOiBhY2lkVGVzdC5yb290V2FsbGV0S2V5cyB9LCBjb2luTmFtZSwge1xuICAgICAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGJhY2tlbmQgPT09ICd3YXNtJykge1xuICAgICAgICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhcbiAgICAgICAgICAgIHBzYnQudG9CdWZmZXIoKSxcbiAgICAgICAgICAgIHV0eG9saWIuZ2V0TmV0d29ya05hbWUoYWNpZFRlc3QubmV0d29yaykhXG4gICAgICAgICAgKTtcbiAgICAgICAgICBleHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0V2FzbShcbiAgICAgICAgICAgIHdhc21Qc2J0LFxuICAgICAgICAgICAgYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXBsYXlQcm90ZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgcHVibGljS2V5czogW2FjaWRUZXN0LmdldFJlcGxheVByb3RlY3Rpb25QdWJsaWNLZXkoKV0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYmFja2VuZDogJHtiYWNrZW5kfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR4Rm9ybWF0ID09PSAnbGVnYWN5Jykge1xuICAgICAgICBjb25zdCBwdWJzID0gYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgICAgICAvLyBFeHRyYWN0IGNoYW5nZSBpbmZvIGZyb20gUFNCVCB0byBwYXNzIHRvIGV4cGxhaW5MZWdhY3lUeFxuICAgICAgICBjb25zdCBjaGFuZ2VJbmZvID0gZ2V0Q2hhbmdlSW5mb0Zyb21Qc2J0KHBzYnQpO1xuICAgICAgICBleHBsYW5hdGlvbiA9IGV4cGxhaW5MZWdhY3lUeCh0eCwgeyBwdWJzLCBjaGFuZ2VJbmZvIH0sIGNvaW5OYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eEZvcm1hdDogJHt0eEZvcm1hdH1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHR4UGFyYW1zXG4gICAgICBsZXQgcmVzb2x2ZWRUeFBhcmFtcztcbiAgICAgIGlmICh0eFBhcmFtcyA9PT0gJ2luZmVyRnJvbUV4cGxhbmF0aW9uJyB8fCB0eFBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc29sdmVkVHhQYXJhbXMgPSBnZXRUeFBhcmFtc0Zyb21FeHBsYW5hdGlvbihleHBsYW5hdGlvbiwgeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MgfSk7XG4gICAgICB9IGVsc2UgaWYgKCdyYmZUeElkcycgaW4gdHhQYXJhbXMpIHtcbiAgICAgICAgLy8gUmVwbGFjZSBwbGFjZWhvbGRlciB0eEhhc2ggd2l0aCBhY3R1YWwgY29tcHV0ZWQgdHhIYXNoXG4gICAgICAgIHJlc29sdmVkVHhQYXJhbXMgPSB7XG4gICAgICAgICAgcmJmVHhJZHM6IHR4UGFyYW1zLnJiZlR4SWRzLm1hcCgoaGFzaCkgPT4gKGhhc2ggPT09ICdQTEFDRUhPTERFUicgPyB0eEhhc2ggOiBoYXNoKSksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlZFR4UGFyYW1zID0gdHhQYXJhbXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MpIHtcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcy5hbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBtb2NrIHdhbGxldFxuICAgICAgbW9ja1dhbGxldCA9IHNpbm9uLmNyZWF0ZVN0dWJJbnN0YW5jZShXYWxsZXQpO1xuICAgICAgbW9ja1dhbGxldC5pZC5yZXR1cm5zKCd0ZXN0LXdhbGxldC1pZCcpO1xuICAgICAgbW9ja1dhbGxldC5jb2luLnJldHVybnMoY29pbi5nZXRDaGFpbigpKTtcbiAgICAgIG1vY2tXYWxsZXQuY29pblNwZWNpZmljLnJldHVybnModW5kZWZpbmVkKTtcblxuICAgICAgLy8gTW9jayBnZXRUcmFuc2FjdGlvbiBmb3IgUkJGIGNhc2VcbiAgICAgIGlmICgncmJmVHhJZHMnIGluIHJlc29sdmVkVHhQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcmJmVHhQYXJhbXMgPSBnZXRUeFBhcmFtc0Zyb21FeHBsYW5hdGlvbihleHBsYW5hdGlvbiwgeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3M6IGZhbHNlIH0pO1xuICAgICAgICBtb2NrV2FsbGV0LmdldFRyYW5zYWN0aW9uLnJlc29sdmVzKHtcbiAgICAgICAgICBvdXRwdXRzOiByYmZUeFBhcmFtcy5yZWNpcGllbnRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgICAgIHZhbHVlU3RyaW5nOiB0eXBlb2Ygci5hbW91bnQgPT09ICdzdHJpbmcnID8gci5hbW91bnQgOiByLmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICAgICAgYWRkcmVzczogci5hZGRyZXNzLFxuICAgICAgICAgICAgLy8gd2FsbGV0IGZpZWxkIGlzIHVuZGVmaW5lZCBmb3IgZXh0ZXJuYWwgb3V0cHV0cyAobm90IHNlbGYtc2VuZHMpXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gTW9jayB2ZXJpZmljYXRpb24gb3B0aW9ucyB3aXRoIGtleWNoYWlucyB0byBkaXNhYmxlIG5ldHdvcmtpbmdcbiAgICAgIC8vIFVzZSB0aGUgc2FtZSBrZXljaGFpbnMgdGhhdCB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBQU0JUXG4gICAgICBjb25zdCBwdWJzID0gYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uOiBWZXJpZmljYXRpb25PcHRpb25zID0ge1xuICAgICAgICBkaXNhYmxlTmV0d29ya2luZzogdHJ1ZSxcbiAgICAgICAga2V5Y2hhaW5zOiB7XG4gICAgICAgICAgdXNlcjogeyBpZDogJzAnLCBwdWI6IHB1YnNbMF0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgICBiYWNrdXA6IHsgaWQ6ICcxJywgcHViOiBwdWJzWzFdLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICAgICAgYml0Z286IHsgaWQ6ICcyJywgcHViOiBwdWJzWzJdLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBTdHViIGV4cGxhaW5UcmFuc2FjdGlvbiB0byByZXR1cm4gdGhlIGV4cGxhbmF0aW9uIHdpdGhvdXQgbWFraW5nIG5ldHdvcmsgY2FsbHNcbiAgICAgIHN0dWJFeHBsYWluVHJhbnNhY3Rpb24gPSBzaW5vbi5zdHViKGNvaW4sICdleHBsYWluVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhleHBsYW5hdGlvbik7XG5cbiAgICAgIGxldCB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPGJpZ2ludD47XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHR4SGV4OiBwc2J0LnRvSGV4KCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHR4Rm9ybWF0ID09PSAnbGVnYWN5Jykge1xuICAgICAgICB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHR4SGV4OiBwc2J0LmdldFVuc2lnbmVkVHgoKS50b0hleCgpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR4Rm9ybWF0OiAke3R4Rm9ybWF0fWApO1xuICAgICAgfVxuXG4gICAgICByZWZQYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHBhcnNlVHJhbnNhY3Rpb24oY29pbiwge1xuICAgICAgICB3YWxsZXQ6IG1vY2tXYWxsZXQgYXMgdW5rbm93biBhcyBVdHhvV2FsbGV0LFxuICAgICAgICB0eFBhcmFtczogcmVzb2x2ZWRUeFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcignY2xlYW51cCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzdHViRXhwbGFpblRyYW5zYWN0aW9uKSB7XG4gICAgICAgIHN0dWJFeHBsYWluVHJhbnNhY3Rpb24ucmVzdG9yZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB0cmFuc2FjdGlvbiB3aXRob3V0IG5ldHdvcmsgY2FsbHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24pO1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucyk7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ub3V0cHV0cyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgdmFsaWQga2V5Y2hhaW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy51c2VyKTtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYmFja3VwKTtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYml0Z28pO1xuICAgICAgY29uc3QgcHVicyA9IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMudXNlci5wdWIsIHB1YnNbMF0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy5iYWNrdXAucHViLCBwdWJzWzFdKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYml0Z28ucHViLCBwdWJzWzJdKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBvdXRwdXRzIGNsYXNzaWZpZWQgYXMgaW50ZXJuYWwgb3IgZXh0ZXJuYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTaW5jZSB3ZSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVjaXBpZW50cywgb3V0cHV0cyB3aWxsIGJlIGNsYXNzaWZpZWQgYmFzZWQgb24gd2hldGhlciB0aGV5IGNhbiBiZVxuICAgICAgLy8gdmVyaWZpZWQgYXMgd2FsbGV0IGFkZHJlc3Nlcy4gU29tZSBtYXkgYmUgZXh0ZXJuYWwgaWYgYWRkcmVzcyB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aG91dCBhIHByb3BlciB3YWxsZXQgc2V0dXAuXG4gICAgICBjb25zdCB0b3RhbE91dHB1dHMgPSByZWZQYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGNoYW5nZU91dHB1dHMgPSByZWZQYXJzZWRUcmFuc2FjdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGV4dGVybmFsT3V0cHV0cyA9IHJlZlBhcnNlZFRyYW5zYWN0aW9uLm91dHB1dHMuZmlsdGVyKChvKSA9PiBvLmV4dGVybmFsID09PSB0cnVlKS5sZW5ndGg7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXh0ZXJuYWxPdXRwdXRzLCAzKTtcblxuICAgICAgYXNzZXJ0Lm9rKHRvdGFsT3V0cHV0cyA+IDAsICdzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUgb3V0cHV0Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2hhbmdlT3V0cHV0cyArIGV4dGVybmFsT3V0cHV0cywgdG90YWxPdXRwdXRzLCAnYWxsIG91dHB1dHMgc2hvdWxkIGJlIGNsYXNzaWZpZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBleHBlY3RlZCBleHBsaWNpdCBhbmQgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChCaWdJbnQocmVmUGFyc2VkVHJhbnNhY3Rpb24uZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KSwgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKEJpZ0ludChyZWZQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpLCBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVRyYW5zYWN0aW9uKFxuICBiYWNrZW5kOiAndXR4b2xpYicgfCAnd2FzbScsXG4gIGZpbHRlcjogKHRlc3Q6IHV0eG9saWIudGVzdHV0aWwuQWNpZFRlc3QpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlXG4pIHtcbiAgZGVzY3JpYmUoYHBhcnNlVHJhbnNhY3Rpb24gKCR7YmFja2VuZH0pYCwgZnVuY3Rpb24gKCkge1xuICAgIHV0eG9saWIudGVzdHV0aWwuQWNpZFRlc3Quc3VpdGUoKVxuICAgICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgICAuZm9yRWFjaCgodGVzdCkgPT4ge1xuICAgICAgICAvLyBEZWZhdWx0IGNhc2U6IHBzYnQgZm9ybWF0LCBpbmZlciByZWNpcGllbnRzIGZyb20gZXhwbGFuYXRpb25cbiAgICAgICAgZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aCh0ZXN0LCAnZGVmYXVsdCcsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eFBhcmFtczogJ2luZmVyRnJvbUV4cGxhbmF0aW9uJyxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGVzdC5uZXR3b3JrICE9PSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXh0ZW5kZWQgdGVzdCBzdWl0ZSBmb3IgYml0Y29pblxuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ2xlZ2FjeScsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eEZvcm1hdDogJ2xlZ2FjeScsXG4gICAgICAgICAgdHhQYXJhbXM6ICdpbmZlckZyb21FeHBsYW5hdGlvbicsXG4gICAgICAgICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aCh0ZXN0LCAnZW1wdHkgcmVjaXBpZW50cycsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdyYmYnLCBiYWNrZW5kLCB7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHJiZlR4SWRzOiBbJ1BMQUNFSE9MREVSJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcycsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eFBhcmFtczogJ2luZmVyRnJvbUV4cGxhbmF0aW9uJyxcbiAgICAgICAgICBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3M6IHRydWUsXG4gICAgICAgICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfSk7XG59XG5cbmRlc2NyaWJlVHJhbnNhY3Rpb24oJ3V0eG9saWInKTtcbmRlc2NyaWJlVHJhbnNhY3Rpb24oJ3dhc20nKTtcbiJdfQ==
|
|
287
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3BhcnNlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUF3QztBQUV4Qyw2Q0FBK0I7QUFDL0IseURBQTJDO0FBQzNDLDhDQUE2RjtBQUM3RixnREFBNkU7QUFFN0UsK0ZBQTRGO0FBRzVGLHFDQUF5QztBQUN6Qyx5RUFBd0c7QUFLeEcsaURBQW9EO0FBR3BELFNBQVMsMEJBQTBCLENBQ2pDLFdBQW1DLEVBQ25DLEVBQUUsMkJBQTJCLEVBQTRDO0lBS3pFLGlGQUFpRjtJQUNqRixNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakYsSUFBSSxlQUFlLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXRHLElBQUksYUFBaUMsQ0FBQztJQUN0QyxJQUFJLDJCQUEyQixFQUFFLENBQUM7UUFDaEMsZ0RBQWdEO1FBQ2hELEVBQUU7UUFDRiwwRUFBMEU7UUFDMUUsc0RBQXNEO1FBQ3RELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxhQUFhLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUN2QyxlQUFlLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsT0FBTztRQUNMLFVBQVUsRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLG9FQUFvRTtZQUNwRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQVE7WUFDeEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1NBQ3RCLENBQUMsQ0FBQztRQUNILGFBQWE7S0FDZCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsSUFBNEI7SUFDekQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzdELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLElBQUksTUFBTSxDQUFDLGtCQUFrQixJQUFJLFNBQVMsQ0FBQztZQUNyRixJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNqRCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNqQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEUsT0FBTztnQkFDTCxPQUFPLEVBQUUsbUJBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFBLG1CQUFXLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNsRyxLQUFLO2dCQUNMLEtBQUs7YUFDTixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLElBQUksQ0FBQyxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUN6RCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQ25DLFFBQW1DLEVBQ25DLEtBQWEsRUFDYixPQUEyQixFQUMzQixFQUNFLFFBQVEsRUFDUiwyQkFBMkIsR0FBRyxLQUFLLEVBQ25DLG1DQUFtQyxFQUNuQyxtQ0FBbUMsRUFDbkMsUUFBUSxHQUFHLE1BQU0sR0FjbEI7SUFFRCxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1FBQ3BDLElBQUksb0JBQStDLENBQUM7UUFDcEQsSUFBSSxJQUFvQyxDQUFDO1FBQ3pDLElBQUksVUFBOEMsQ0FBQztRQUNuRCxJQUFJLHNCQUF1QyxDQUFDO1FBRTVDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSztZQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFBLG1CQUFXLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsUUFBUSxDQUFDLENBQUM7WUFFN0IsOEJBQThCO1lBQzlCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRTFCLElBQUksV0FBbUMsQ0FBQztZQUN4QyxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzFCLFdBQVcsR0FBRyxJQUFBLHlCQUFXLEVBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUU7d0JBQzNFLE1BQU0sRUFBRSxJQUFJO3FCQUNiLENBQUMsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUM5QixNQUFNLFFBQVEsR0FBRyw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUNwRCxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2YsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFFLENBQzFDLENBQUM7b0JBQ0YsV0FBVyxHQUFHLElBQUEsNkJBQWUsRUFDM0IsUUFBUSxFQUNSLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFtQixFQUNwRjt3QkFDRSxnQkFBZ0IsRUFBRTs0QkFDaEIsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLDRCQUE0QixFQUFFLENBQUM7eUJBQ3REO3FCQUNGLENBQ0YsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2hGLDJEQUEyRDtnQkFDM0QsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9DLFdBQVcsR0FBRyxJQUFBLDZCQUFlLEVBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFFRCxxQkFBcUI7WUFDckIsSUFBSSxnQkFBZ0IsQ0FBQztZQUNyQixJQUFJLFFBQVEsS0FBSyxzQkFBc0IsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xFLGdCQUFnQixHQUFHLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxFQUFFLDJCQUEyQixFQUFFLENBQUMsQ0FBQztZQUM5RixDQUFDO2lCQUFNLElBQUksVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNsQyx5REFBeUQ7Z0JBQ3pELGdCQUFnQixHQUFHO29CQUNqQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDcEYsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixnQkFBZ0IsR0FBRyxRQUFRLENBQUM7WUFDOUIsQ0FBQztZQUVELElBQUksMkJBQTJCLEVBQUUsQ0FBQztnQkFDaEMsZ0JBQWdCLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO1lBQ3JELENBQUM7WUFFRCxxQkFBcUI7WUFDckIsVUFBVSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBTSxDQUFDLENBQUM7WUFDOUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN4QyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN6QyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUzQyxtQ0FBbUM7WUFDbkMsSUFBSSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxXQUFXLEdBQUcsMEJBQTBCLENBQUMsV0FBVyxFQUFFLEVBQUUsMkJBQTJCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDcEcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDMUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO3dCQUMxRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87d0JBQ2xCLGtFQUFrRTtxQkFDbkUsQ0FBQyxDQUFDO2lCQUNKLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxpRUFBaUU7WUFDakUsMkRBQTJEO1lBQzNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDaEYsTUFBTSxZQUFZLEdBQXdCO2dCQUN4QyxpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixTQUFTLEVBQUU7b0JBQ1QsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7b0JBQ3BELE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO29CQUN0RCxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtpQkFDdEQ7YUFDRixDQUFDO1lBRUYsaUZBQWlGO1lBQ2pGLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXRGLElBQUksVUFBdUMsQ0FBQztZQUM1QyxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsVUFBVSxHQUFHO29CQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO2lCQUNwQixDQUFDO1lBQ0osQ0FBQztpQkFBTSxJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDakMsVUFBVSxHQUFHO29CQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxFQUFFO2lCQUNwQyxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDbkQsQ0FBQztZQUVELG9CQUFvQixHQUFHLE1BQU0sSUFBQSxtQ0FBZ0IsRUFBQyxJQUFJLEVBQUU7Z0JBQ2xELE1BQU0sRUFBRSxVQUFtQztnQkFDM0MsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsVUFBVTtnQkFDVixZQUFZO2FBQ2IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ2YsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO2dCQUMzQixzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUU7WUFDbkQsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNoQyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2QkFBNkIsRUFBRTtZQUNoQyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELGdCQUFNLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2hGLGdCQUFNLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLGdCQUFNLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLGdCQUFNLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdEQUF3RCxFQUFFO1lBQzNELGtHQUFrRztZQUNsRyxrSEFBa0g7WUFDbEgsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUN6RCxNQUFNLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ2hFLE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQy9GLGdCQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV2QyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7WUFDL0QsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLGVBQWUsRUFBRSxZQUFZLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztRQUN4RyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtRUFBbUUsRUFBRTtZQUN0RSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsMkJBQTJCLENBQUMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1lBQ2xILGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLG1DQUFtQyxDQUFDLENBQUM7UUFDcEgsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUMxQixPQUEyQixFQUMzQixTQUF1RCxHQUFHLEVBQUUsQ0FBQyxJQUFJO0lBRWpFLFFBQVEsQ0FBQyxxQkFBcUIsT0FBTyxHQUFHLEVBQUU7UUFDeEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO2FBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDZCxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQiwrREFBK0Q7WUFDL0QsNEJBQTRCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7Z0JBQ3JELFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLG1DQUFtQyxFQUFFLEtBQUs7Z0JBQzFDLG1DQUFtQyxFQUFFLEVBQUU7YUFDeEMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzlDLE9BQU87WUFDVCxDQUFDO1lBQ0Qsa0NBQWtDO1lBRWxDLDRCQUE0QixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO2dCQUNwRCxRQUFRLEVBQUUsUUFBUTtnQkFDbEIsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsbUNBQW1DLEVBQUUsS0FBSztnQkFDMUMsbUNBQW1DLEVBQUUsRUFBRTthQUN4QyxDQUFDLENBQUM7WUFFSCw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFO2dCQUM5RCxRQUFRLEVBQUU7b0JBQ1IsVUFBVSxFQUFFLEVBQUU7aUJBQ2Y7Z0JBQ0QsbUNBQW1DLEVBQUUsRUFBRTtnQkFDdkMsbUNBQW1DLEVBQUUsS0FBSzthQUMzQyxDQUFDLENBQUM7WUFFSCw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDakQsUUFBUSxFQUFFO29CQUNSLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDMUI7Z0JBQ0QsbUNBQW1DLEVBQUUsS0FBSztnQkFDMUMsbUNBQW1DLEVBQUUsRUFBRTthQUN4QyxDQUFDLENBQUM7WUFFSCw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLEVBQUUsT0FBTyxFQUFFO2dCQUN4RSxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQywyQkFBMkIsRUFBRSxJQUFJO2dCQUNqQyxtQ0FBbUMsRUFBRSxLQUFLO2dCQUMxQyxtQ0FBbUMsRUFBRSxFQUFFO2FBQ3hDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IFdhbGxldCwgVmVyaWZpY2F0aW9uT3B0aW9ucywgSVRyYW5zYWN0aW9uUmVjaXBpZW50LCBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcywgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgcGFyc2VUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9wYXJzZVRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFBhcnNlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3R5cGVzJztcbmltcG9ydCB7IFV0eG9XYWxsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvd2FsbGV0JztcbmltcG9ydCB7IGdldFV0eG9Db2luIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBleHBsYWluTGVnYWN5VHgsIGV4cGxhaW5Qc2J0LCBleHBsYWluUHNidFdhc20gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQnO1xuaW1wb3J0IHR5cGUge1xuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBDaGFuZ2VBZGRyZXNzSW5mbyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZXRDb2luTmFtZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblByZWJ1aWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2Fic3RyYWN0VXR4b0NvaW4nO1xuXG5mdW5jdGlvbiBnZXRUeFBhcmFtc0Zyb21FeHBsYW5hdGlvbihcbiAgZXhwbGFuYXRpb246IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIHsgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzIH06IHsgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzOiBib29sZWFuIH1cbik6IHtcbiAgcmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gIGNoYW5nZUFkZHJlc3M/OiBzdHJpbmc7XG59IHtcbiAgLy8gVGhlIGV4dGVybmFsIG91dHB1dHMgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGluIG91dHB1dHMgYnV0IG5vdCBpbiBjaGFuZ2VPdXRwdXRzXG4gIGNvbnN0IGNoYW5nZUFkZHJlc3NlcyA9IG5ldyBTZXQoZXhwbGFuYXRpb24uY2hhbmdlT3V0cHV0cy5tYXAoKG8pID0+IG8uYWRkcmVzcykpO1xuICBsZXQgZXh0ZXJuYWxPdXRwdXRzID0gZXhwbGFuYXRpb24ub3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uYWRkcmVzcyAmJiAhY2hhbmdlQWRkcmVzc2VzLmhhcyhvLmFkZHJlc3MpKTtcblxuICBsZXQgY2hhbmdlQWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAoZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzKSB7XG4gICAgLy8gY29udmVydCBhbiBleHRlcm5hbCBvdXRwdXQgdG8gYSBjaGFuZ2Ugb3V0cHV0XG4gICAgLy9cbiAgICAvLyBpbiBjb21iaW5hdGlvbiB3aXRoIGFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzLCB0aGlzIGFsbG93cyBhbiBleHRlcm5hbFxuICAgIC8vIG91dHB1dCBvbiB0aGUgdHJhbnNhY3Rpb24gd2l0aG91dCBhIHNpemUgY29uc3RyYWludFxuICAgIGNvbnN0IGV4dGVybmFsT3V0cHV0ID0gZXh0ZXJuYWxPdXRwdXRzWzBdO1xuICAgIGlmICghZXh0ZXJuYWxPdXRwdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbm8gZXh0ZXJuYWwgb3V0cHV0IGZvdW5kJyk7XG4gICAgfVxuICAgIGNoYW5nZUFkZHJlc3MgPSBleHRlcm5hbE91dHB1dC5hZGRyZXNzO1xuICAgIGV4dGVybmFsT3V0cHV0cyA9IGV4dGVybmFsT3V0cHV0cy5zbGljZSgxKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVjaXBpZW50czogZXh0ZXJuYWxPdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzISxcbiAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudCxcbiAgICB9KSksXG4gICAgY2hhbmdlQWRkcmVzcyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhbmdlSW5mb0Zyb21Qc2J0KHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQpOiBDaGFuZ2VBZGRyZXNzSW5mb1tdIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5maW5kSW50ZXJuYWxPdXRwdXRJbmRpY2VzKHBzYnQpLm1hcCgoaSkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gcHNidC5kYXRhLm91dHB1dHNbaV07XG4gICAgICBjb25zdCBkZXJpdmF0aW9ucyA9IG91dHB1dC5iaXAzMkRlcml2YXRpb24gPz8gb3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbiA/PyB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWRlcml2YXRpb25zIHx8IGRlcml2YXRpb25zLmxlbmd0aCAhPT0gMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDMgZGVyaXZhdGlvbiBwYXRocycpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF0aCA9IGRlcml2YXRpb25zWzBdLnBhdGg7XG4gICAgICBjb25zdCB7IGNoYWluLCBpbmRleCB9ID0gdXR4b2xpYi5iaXRnby5nZXRDaGFpbkFuZEluZGV4RnJvbVBhdGgocGF0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhZGRyZXNzOiB3YXNtQWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0V2l0aENvaW4ocHNidC50eE91dHB1dHNbaV0uc2NyaXB0LCBnZXRDb2luTmFtZShwc2J0Lm5ldHdvcmspKSxcbiAgICAgICAgY2hhaW4sXG4gICAgICAgIGluZGV4LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5FcnJvck5vTXVsdGlTaWdJbnB1dEZvdW5kKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgoXG4gIGFjaWRUZXN0OiB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0LFxuICBsYWJlbDogc3RyaW5nLFxuICBiYWNrZW5kOiAndXR4b2xpYicgfCAnd2FzbScsXG4gIHtcbiAgICB0eFBhcmFtcyxcbiAgICBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MgPSBmYWxzZSxcbiAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCxcbiAgICB0eEZvcm1hdCA9ICdwc2J0JyxcbiAgfToge1xuICAgIHR4UGFyYW1zOlxuICAgICAgfCB7XG4gICAgICAgICAgcmVjaXBpZW50czogSVRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIHJiZlR4SWRzOiBzdHJpbmdbXTtcbiAgICAgICAgfVxuICAgICAgfCAnaW5mZXJGcm9tRXhwbGFuYXRpb24nO1xuICAgIGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcz86IGJvb2xlYW47XG4gICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IGJpZ2ludDtcbiAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogYmlnaW50O1xuICAgIHR4Rm9ybWF0PzogJ3BzYnQnIHwgJ2xlZ2FjeSc7XG4gIH1cbikge1xuICBkZXNjcmliZShgJHthY2lkVGVzdC5uYW1lfS8ke2xhYmVsfWAsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcmVmUGFyc2VkVHJhbnNhY3Rpb246IFBhcnNlZFRyYW5zYWN0aW9uPGJpZ2ludD47XG4gICAgbGV0IGNvaW46IFJldHVyblR5cGU8dHlwZW9mIGdldFV0eG9Db2luPjtcbiAgICBsZXQgbW9ja1dhbGxldDogc2lub24uU2lub25TdHViYmVkSW5zdGFuY2U8V2FsbGV0PjtcbiAgICBsZXQgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbjogc2lub24uU2lub25TdHViO1xuXG4gICAgYmVmb3JlKCdwcmVwYXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29pbk5hbWUgPSBnZXRDb2luTmFtZShhY2lkVGVzdC5uZXR3b3JrKTtcbiAgICAgIGNvaW4gPSBnZXRVdHhvQ29pbihjb2luTmFtZSk7XG5cbiAgICAgIC8vIENyZWF0ZSBQU0JUIGFuZCBleHBsYW5hdGlvblxuICAgICAgY29uc3QgcHNidCA9IGFjaWRUZXN0LmNyZWF0ZVBzYnQoKTtcbiAgICAgIGNvbnN0IHR4ID0gcHNidC5nZXRVbnNpZ25lZFR4KCk7XG4gICAgICBjb25zdCB0eEhhc2ggPSB0eC5nZXRJZCgpO1xuXG4gICAgICBsZXQgZXhwbGFuYXRpb246IFRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICBpZiAoYmFja2VuZCA9PT0gJ3V0eG9saWInKSB7XG4gICAgICAgICAgZXhwbGFuYXRpb24gPSBleHBsYWluUHNidChwc2J0LCB7IHB1YnM6IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzIH0sIGNvaW5OYW1lLCB7XG4gICAgICAgICAgICBzdHJpY3Q6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmFja2VuZCA9PT0gJ3dhc20nKSB7XG4gICAgICAgICAgY29uc3Qgd2FzbVBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKFxuICAgICAgICAgICAgcHNidC50b0J1ZmZlcigpLFxuICAgICAgICAgICAgdXR4b2xpYi5nZXROZXR3b3JrTmFtZShhY2lkVGVzdC5uZXR3b3JrKSFcbiAgICAgICAgICApO1xuICAgICAgICAgIGV4cGxhbmF0aW9uID0gZXhwbGFpblBzYnRXYXNtKFxuICAgICAgICAgICAgd2FzbVBzYnQsXG4gICAgICAgICAgICBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz4sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlcGxheVByb3RlY3Rpb246IHtcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXlzOiBbYWNpZFRlc3QuZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmxpY0tleSgpXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBiYWNrZW5kOiAke2JhY2tlbmR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHhGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICAgIGNvbnN0IHB1YnMgPSBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgICAgIC8vIEV4dHJhY3QgY2hhbmdlIGluZm8gZnJvbSBQU0JUIHRvIHBhc3MgdG8gZXhwbGFpbkxlZ2FjeVR4XG4gICAgICAgIGNvbnN0IGNoYW5nZUluZm8gPSBnZXRDaGFuZ2VJbmZvRnJvbVBzYnQocHNidCk7XG4gICAgICAgIGV4cGxhbmF0aW9uID0gZXhwbGFpbkxlZ2FjeVR4KHR4LCB7IHB1YnMsIGNoYW5nZUluZm8gfSwgY29pbk5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR4Rm9ybWF0OiAke3R4Rm9ybWF0fWApO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlcm1pbmUgdHhQYXJhbXNcbiAgICAgIGxldCByZXNvbHZlZFR4UGFyYW1zO1xuICAgICAgaWYgKHR4UGFyYW1zID09PSAnaW5mZXJGcm9tRXhwbGFuYXRpb24nIHx8IHR4UGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcyA9IGdldFR4UGFyYW1zRnJvbUV4cGxhbmF0aW9uKGV4cGxhbmF0aW9uLCB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcyB9KTtcbiAgICAgIH0gZWxzZSBpZiAoJ3JiZlR4SWRzJyBpbiB0eFBhcmFtcykge1xuICAgICAgICAvLyBSZXBsYWNlIHBsYWNlaG9sZGVyIHR4SGFzaCB3aXRoIGFjdHVhbCBjb21wdXRlZCB0eEhhc2hcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcyA9IHtcbiAgICAgICAgICByYmZUeElkczogdHhQYXJhbXMucmJmVHhJZHMubWFwKChoYXNoKSA9PiAoaGFzaCA9PT0gJ1BMQUNFSE9MREVSJyA/IHR4SGFzaCA6IGhhc2gpKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmVkVHhQYXJhbXMgPSB0eFBhcmFtcztcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcykge1xuICAgICAgICByZXNvbHZlZFR4UGFyYW1zLmFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIG1vY2sgd2FsbGV0XG4gICAgICBtb2NrV2FsbGV0ID0gc2lub24uY3JlYXRlU3R1Ykluc3RhbmNlKFdhbGxldCk7XG4gICAgICBtb2NrV2FsbGV0LmlkLnJldHVybnMoJ3Rlc3Qtd2FsbGV0LWlkJyk7XG4gICAgICBtb2NrV2FsbGV0LmNvaW4ucmV0dXJucyhjb2luLmdldENoYWluKCkpO1xuICAgICAgbW9ja1dhbGxldC5jb2luU3BlY2lmaWMucmV0dXJucyh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBNb2NrIGdldFRyYW5zYWN0aW9uIGZvciBSQkYgY2FzZVxuICAgICAgaWYgKCdyYmZUeElkcycgaW4gcmVzb2x2ZWRUeFBhcmFtcykge1xuICAgICAgICBjb25zdCByYmZUeFBhcmFtcyA9IGdldFR4UGFyYW1zRnJvbUV4cGxhbmF0aW9uKGV4cGxhbmF0aW9uLCB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzczogZmFsc2UgfSk7XG4gICAgICAgIG1vY2tXYWxsZXQuZ2V0VHJhbnNhY3Rpb24ucmVzb2x2ZXMoe1xuICAgICAgICAgIG91dHB1dHM6IHJiZlR4UGFyYW1zLnJlY2lwaWVudHMubWFwKChyKSA9PiAoe1xuICAgICAgICAgICAgdmFsdWVTdHJpbmc6IHR5cGVvZiByLmFtb3VudCA9PT0gJ3N0cmluZycgPyByLmFtb3VudCA6IHIuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhZGRyZXNzOiByLmFkZHJlc3MsXG4gICAgICAgICAgICAvLyB3YWxsZXQgZmllbGQgaXMgdW5kZWZpbmVkIGZvciBleHRlcm5hbCBvdXRwdXRzIChub3Qgc2VsZi1zZW5kcylcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBNb2NrIHZlcmlmaWNhdGlvbiBvcHRpb25zIHdpdGgga2V5Y2hhaW5zIHRvIGRpc2FibGUgbmV0d29ya2luZ1xuICAgICAgLy8gVXNlIHRoZSBzYW1lIGtleWNoYWlucyB0aGF0IHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIFBTQlRcbiAgICAgIGNvbnN0IHB1YnMgPSBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb246IFZlcmlmaWNhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIGRpc2FibGVOZXR3b3JraW5nOiB0cnVlLFxuICAgICAgICBrZXljaGFpbnM6IHtcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnMCcsIHB1YjogcHVic1swXSwgdHlwZTogJ2luZGVwZW5kZW50JyB9LFxuICAgICAgICAgIGJhY2t1cDogeyBpZDogJzEnLCBwdWI6IHB1YnNbMV0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgICBiaXRnbzogeyBpZDogJzInLCBwdWI6IHB1YnNbMl0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0dWIgZXhwbGFpblRyYW5zYWN0aW9uIHRvIHJldHVybiB0aGUgZXhwbGFuYXRpb24gd2l0aG91dCBtYWtpbmcgbmV0d29yayBjYWxsc1xuICAgICAgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbiA9IHNpbm9uLnN0dWIoY29pbiwgJ2V4cGxhaW5UcmFuc2FjdGlvbicpLnJlc29sdmVzKGV4cGxhbmF0aW9uKTtcblxuICAgICAgbGV0IHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8YmlnaW50PjtcbiAgICAgIGlmICh0eEZvcm1hdCA9PT0gJ3BzYnQnKSB7XG4gICAgICAgIHR4UHJlYnVpbGQgPSB7XG4gICAgICAgICAgdHhIZXg6IHBzYnQudG9IZXgoKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHhGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICAgIHR4UHJlYnVpbGQgPSB7XG4gICAgICAgICAgdHhIZXg6IHBzYnQuZ2V0VW5zaWduZWRUeCgpLnRvSGV4KCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHhGb3JtYXQ6ICR7dHhGb3JtYXR9YCk7XG4gICAgICB9XG5cbiAgICAgIHJlZlBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgcGFyc2VUcmFuc2FjdGlvbihjb2luLCB7XG4gICAgICAgIHdhbGxldDogbW9ja1dhbGxldCBhcyB1bmtub3duIGFzIFV0eG9XYWxsZXQsXG4gICAgICAgIHR4UGFyYW1zOiByZXNvbHZlZFR4UGFyYW1zLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyKCdjbGVhbnVwJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHN0dWJFeHBsYWluVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgc3R1YkV4cGxhaW5UcmFuc2FjdGlvbi5yZXN0b3JlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIHRyYW5zYWN0aW9uIHdpdGhvdXQgbmV0d29yayBjYWxscycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbik7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zKTtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSB2YWxpZCBrZXljaGFpbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLnVzZXIpO1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy5iYWNrdXApO1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy5iaXRnbyk7XG4gICAgICBjb25zdCBwdWJzID0gYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy51c2VyLnB1YiwgcHVic1swXSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVmUGFyc2VkVHJhbnNhY3Rpb24ua2V5Y2hhaW5zLmJhY2t1cC5wdWIsIHB1YnNbMV0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy5iaXRnby5wdWIsIHB1YnNbMl0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIG91dHB1dHMgY2xhc3NpZmllZCBhcyBpbnRlcm5hbCBvciBleHRlcm5hbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNpbmNlIHdlIGRpZG4ndCBzcGVjaWZ5IGFueSByZWNpcGllbnRzLCBvdXRwdXRzIHdpbGwgYmUgY2xhc3NpZmllZCBiYXNlZCBvbiB3aGV0aGVyIHRoZXkgY2FuIGJlXG4gICAgICAvLyB2ZXJpZmllZCBhcyB3YWxsZXQgYWRkcmVzc2VzLiBTb21lIG1heSBiZSBleHRlcm5hbCBpZiBhZGRyZXNzIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRob3V0IGEgcHJvcGVyIHdhbGxldCBzZXR1cC5cbiAgICAgIGNvbnN0IHRvdGFsT3V0cHV0cyA9IHJlZlBhcnNlZFRyYW5zYWN0aW9uLm91dHB1dHMubGVuZ3RoO1xuICAgICAgY29uc3QgY2hhbmdlT3V0cHV0cyA9IHJlZlBhcnNlZFRyYW5zYWN0aW9uLmNoYW5nZU91dHB1dHMubGVuZ3RoO1xuICAgICAgY29uc3QgZXh0ZXJuYWxPdXRwdXRzID0gcmVmUGFyc2VkVHJhbnNhY3Rpb24ub3V0cHV0cy5maWx0ZXIoKG8pID0+IG8uZXh0ZXJuYWwgPT09IHRydWUpLmxlbmd0aDtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHRlcm5hbE91dHB1dHMsIDMpO1xuXG4gICAgICBhc3NlcnQub2sodG90YWxPdXRwdXRzID4gMCwgJ3Nob3VsZCBoYXZlIGF0IGxlYXN0IG9uZSBvdXRwdXQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjaGFuZ2VPdXRwdXRzICsgZXh0ZXJuYWxPdXRwdXRzLCB0b3RhbE91dHB1dHMsICdhbGwgb3V0cHV0cyBzaG91bGQgYmUgY2xhc3NpZmllZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGV4cGVjdGVkIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBleHRlcm5hbCBzcGVuZCBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKEJpZ0ludChyZWZQYXJzZWRUcmFuc2FjdGlvbi5leHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpLCBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoQmlnSW50KHJlZlBhcnNlZFRyYW5zYWN0aW9uLmltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCksIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVHJhbnNhY3Rpb24oXG4gIGJhY2tlbmQ6ICd1dHhvbGliJyB8ICd3YXNtJyxcbiAgZmlsdGVyOiAodGVzdDogdXR4b2xpYi50ZXN0dXRpbC5BY2lkVGVzdCkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWVcbikge1xuICBkZXNjcmliZShgcGFyc2VUcmFuc2FjdGlvbiAoJHtiYWNrZW5kfSlgLCBmdW5jdGlvbiAoKSB7XG4gICAgdXR4b2xpYi50ZXN0dXRpbC5BY2lkVGVzdC5zdWl0ZSgpXG4gICAgICAuZmlsdGVyKGZpbHRlcilcbiAgICAgIC5mb3JFYWNoKCh0ZXN0KSA9PiB7XG4gICAgICAgIC8vIERlZmF1bHQgY2FzZTogcHNidCBmb3JtYXQsIGluZmVyIHJlY2lwaWVudHMgZnJvbSBleHBsYW5hdGlvblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdkZWZhdWx0JywgYmFja2VuZCwge1xuICAgICAgICAgIHR4UGFyYW1zOiAnaW5mZXJGcm9tRXhwbGFuYXRpb24nLFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxODAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMG4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0ZXN0Lm5ldHdvcmsgIT09IHV0eG9saWIubmV0d29ya3MuYml0Y29pbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHRlbmRlZCB0ZXN0IHN1aXRlIGZvciBiaXRjb2luXG5cbiAgICAgICAgZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aCh0ZXN0LCAnbGVnYWN5JywgYmFja2VuZCwge1xuICAgICAgICAgIHR4Rm9ybWF0OiAnbGVnYWN5JyxcbiAgICAgICAgICB0eFBhcmFtczogJ2luZmVyRnJvbUV4cGxhbmF0aW9uJyxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdlbXB0eSByZWNpcGllbnRzJywgYmFja2VuZCwge1xuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ3JiZicsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgcmJmVHhJZHM6IFsnUExBQ0VIT0xERVInXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAxODAwbixcbiAgICAgICAgICBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMG4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ2FsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzJywgYmFja2VuZCwge1xuICAgICAgICAgIHR4UGFyYW1zOiAnaW5mZXJGcm9tRXhwbGFuYXRpb24nLFxuICAgICAgICAgIGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmVUcmFuc2FjdGlvbigndXR4b2xpYicpO1xuZGVzY3JpYmVUcmFuc2FjdGlvbignd2FzbScpO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputDifference.d.ts","sourceRoot":"","sources":["../../../../../test/unit/transaction/outputDifference.ts"],"names":[],"mappings":""}
|