{
  "contractName": "DepositRedemption",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{\"increaseRedemptionFee(DepositUtils.Deposit storage,bytes8,bytes8)\":{\"details\":\"This sends us back to AWAITING_WITHDRAWAL_SIGNATURE.\",\"params\":{\"_d\":\"Deposit storage pointer.\",\"_newOutputValueBytes\":\"The new output's value.\",\"_previousOutputValueBytes\":\"The previous output's value.\"}},\"notifyRedemptionProofTimedOut(DepositUtils.Deposit storage)\":{\"details\":\"This is considered fraud, and is punished.\",\"params\":{\"_d\":\"Deposit storage pointer.\"}},\"notifyRedemptionSignatureTimedOut(DepositUtils.Deposit storage)\":{\"details\":\"This is considered fraud, and is punished.\",\"params\":{\"_d\":\"Deposit storage pointer.\"}},\"provideRedemptionProof(DepositUtils.Deposit storage,bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)\":{\"details\":\"The signers will be penalized if this is not called.\",\"params\":{\"_bitcoinHeaders\":\"An array of tightly-packed bitcoin headers.\",\"_d\":\"Deposit storage pointer.\",\"_merkleProof\":\"The merkle proof of inclusion of the tx in the bitcoin block.\",\"_txIndexInBlock\":\"The index of the tx in the Bitcoin block (0-indexed).\",\"_txInputVector\":\"All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\",\"_txLocktime\":\"Final 4 bytes of the transaction.\",\"_txOutputVector\":\"All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\",\"_txVersion\":\"Transaction version number (4-byte LE).\"}},\"provideRedemptionSignature(DepositUtils.Deposit storage,uint8,bytes32,bytes32)\":{\"details\":\"The signers will be penalized if this (or provideRedemptionProof) is not called.\",\"params\":{\"_d\":\"Deposit storage pointer.\",\"_r\":\"Signature R value.\",\"_s\":\"Signature S value. Should be in the low half of secp256k1 curve's order.\",\"_v\":\"Signature recovery value.\"}},\"redemptionTransactionChecks(DepositUtils.Deposit storage,bytes,bytes)\":{\"details\":\"We only look at the first input and first output. Revert if we find the wrong UTXO or value recipient.                         It's safe to look at only the first input/output as anything that breaks this can be considered fraud                         and can be caught by ECDSAFraudProof.\",\"params\":{\"_d\":\"Deposit storage pointer.\",\"_txInputVector\":\"All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\",\"_txOutputVector\":\"All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\"},\"return\":\"The value sent to the redeemer's public key hash.\"},\"requestRedemption(DepositUtils.Deposit storage,bytes8,bytes)\":{\"details\":\"The redeemer specifies details about the Bitcoin redemption transaction.\",\"params\":{\"_d\":\"Deposit storage pointer.\",\"_outputValueBytes\":\"The 8-byte LE output size.\",\"_redeemerOutputScript\":\"The redeemer's length-prefixed output script.\"}},\"transferAndRequestRedemption(DepositUtils.Deposit storage,bytes8,bytes,address)\":{\"details\":\"The redeemer specifies details about the Bitcoin redemption tx and pays for the redemption                             on behalf of _finalRecipient.\",\"params\":{\"_d\":\"Deposit storage pointer.\",\"_finalRecipient\":\"The address to receive the TDT and later be recorded as deposit redeemer.\",\"_outputValueBytes\":\"The 8-byte LE output size.\",\"_redeemerOutputScript\":\"The redeemer's length-prefixed output script.\"}}}},\"userdoc\":{\"methods\":{\"increaseRedemptionFee(DepositUtils.Deposit storage,bytes8,bytes8)\":{\"notice\":\"Anyone may notify the contract that a fee bump is needed.\"},\"notifyRedemptionProofTimedOut(DepositUtils.Deposit storage)\":{\"notice\":\"Anyone may notify the contract that the signers have failed to produce a redemption proof.\"},\"notifyRedemptionSignatureTimedOut(DepositUtils.Deposit storage)\":{\"notice\":\"Anyone may notify the contract that the signers have failed to produce a signature.\"},\"provideRedemptionProof(DepositUtils.Deposit storage,bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)\":{\"notice\":\"Anyone may provide a withdrawal proof to prove redemption.\"},\"provideRedemptionSignature(DepositUtils.Deposit storage,uint8,bytes32,bytes32)\":{\"notice\":\"Anyone may provide a withdrawal signature if it was requested.\"},\"redemptionTransactionChecks(DepositUtils.Deposit storage,bytes,bytes)\":{\"notice\":\"Check the redemption transaction input and output vector to ensure the transaction spends                         the correct UTXO and sends value to the appropriate public key hash.\"},\"requestRedemption(DepositUtils.Deposit storage,bytes8,bytes)\":{\"notice\":\"Only TDT holder can request redemption,                             unless Deposit is expired or in COURTESY_CALL.\"},\"transferAndRequestRedemption(DepositUtils.Deposit storage,bytes8,bytes,address)\":{\"notice\":\"Anyone can request redemption as long as they can.                             approve the TDT transfer to the final recipient.\"}}}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositRedemption.sol\":\"DepositRedemption\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/DepositLog.sol\":{\"keccak256\":\"0xd2422abaf64bf2d28f4c0548bc31c3d0e4c5f3e4414486c149b773bea0c9db0a\",\"urls\":[\"bzz-raw://c4b0e3caea108ce67da5922906753dc1a1f87cee923e7c32260239150f2152bb\",\"dweb:/ipfs/QmcHcftf4M6ZyuFG725QiFGHuAtz6zDQZ9HCEaoP5Wb6Fd\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositLiquidation.sol\":{\"keccak256\":\"0x6ec98705ac0cfc20f2e94069ba88c74816c40283c47b3086cf619b69d8a15379\",\"urls\":[\"bzz-raw://981e7e1ababfe4bb7bb35251679f59d188348c416af29822794011a0e48f2cd3\",\"dweb:/ipfs/QmTpPQCYP3qzKdcMBLBZGRSM2X6rgR1CZmYDQ7SHP4pjrb\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositRedemption.sol\":{\"keccak256\":\"0xe40c0cbb443715c4f587b78f568348276fabae9a2f77645596367a1f65b1fae5\",\"urls\":[\"bzz-raw://310d07df39ad769b5ffca044a1a589686268d72ac36d568360da3a4a9ab16f93\",\"dweb:/ipfs/QmT9stQ2AVkF7i9nvDSTswhD6EkfNHVCtTmRENsVqYxwso\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositStates.sol\":{\"keccak256\":\"0x0b407fe4cfa56771c7cb0280e58c23e6c79089bb0f39ec9af83855103cfadce0\",\"urls\":[\"bzz-raw://b06c9ff8c10125cd7dcee7167fd081c95248c97c699a4dfc92bf65d68774f5f1\",\"dweb:/ipfs/QmcdTkj1XtJcPhF9pxr56xV4DW3SxGaaiE5PeGxbYVoHL3\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol\":{\"keccak256\":\"0xc18e532fc384f45567abcf7fbe7bccb885308d63ffeed41d9cf845573a289b98\",\"urls\":[\"bzz-raw://7250e8fce13326313e64d2f24e093bd51c9fdba939b8370f64a1fe820814275b\",\"dweb:/ipfs/QmVfX5w4xN6gxoqbdgPeeTbBvFtxxaNYWSknSY7JDtve2b\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/OutsourceDepositLogging.sol\":{\"keccak256\":\"0x8bddca84b4106ea5d865b5e19c0d49f3dc94a7e614c7403ae05074eda01d6ee9\",\"urls\":[\"bzz-raw://65b05f6e04ae46a16194db335ad21dd806d0b07ad571a126b6981896890c8a4c\",\"dweb:/ipfs/QmTF4RgELhXX7pooNKwW8qNY7Sr7dFY7vfueApjTMa99jt\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITBTCSystem.sol\":{\"keccak256\":\"0xd8530ab1baddbdfbba6c1b03e547375afe79493b9948d645f94fc0da12ec953b\",\"urls\":[\"bzz-raw://713285a0a4d865a37f3770ce848c20f7277e1540c0a8aa43c2ae0966a7c3df9a\",\"dweb:/ipfs/QmaPiXxvySt9UDmQtVGidh8TQ4XJdxY2X61rEBd8346ELi\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITokenRecipient.sol\":{\"keccak256\":\"0x4ac6830ad44d0b0d70ebabc60150e9c915c7c0bd0129ef868d5d2cd8da0c32bd\",\"urls\":[\"bzz-raw://a5c6465285add41f07a951f90405800a8802e323ea11e9c7bdb5625ce109c7f7\",\"dweb:/ipfs/QmRf7B4WxsS7gbSwUotgQM633BQc2ye7rhYC1RNVFamBfp\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/DepositFactoryAuthority.sol\":{\"keccak256\":\"0xd8e81ec58dea6a6bcc554e8c7e6c58898ab11a410c3f61224330cbe833992add\",\"urls\":[\"bzz-raw://9d2b23cf1e2f98eb77acf6ae62933e48494113e1d6091146459fd79a635f1dcf\",\"dweb:/ipfs/QmPK3nTmcrScDavDSXGHvonhfik3BJ55qhwSnUmhzL5QUE\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol\":{\"keccak256\":\"0x3d9980b4b18be7e69364b93581d86d08dd2c66fc76b2f9f0af0b4911dc648318\",\"urls\":[\"bzz-raw://751dae1cd68c285a22b513d515074eb6704e11e00ba8196f360d47dc8551dd86\",\"dweb:/ipfs/QmRe5u8bjSd2CMvjgWMzpeea3VdcqEGwAP91zvjxgur8o8\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCConstants.sol\":{\"keccak256\":\"0x74833fb25cf9f24716d563c8fad0fd6172d03577dc85ab4271ca4754285ee915\",\"urls\":[\"bzz-raw://62d37b71546ea52f0c86170b588b021a488785e8570f904f0d2bcfecee93f6a7\",\"dweb:/ipfs/QmePuD631VYpEproKbap8cPXmWeb5mYjU6bwEWnxKCVWbz\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCDepositToken.sol\":{\"keccak256\":\"0xd9238bbd83f5352706426103a0708ad7c00ffbd90340a4b3bab03d2c5371e48b\",\"urls\":[\"bzz-raw://f1fc94f00aeabd49bd0f8ecf372213e83c949454c28fa672a46dd12d9a0b4311\",\"dweb:/ipfs/QmaCzqi2g4GSvzHDDES61FauDmdTGGyZrCkK1BdxpMqYa3\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol\":{\"keccak256\":\"0x167b07029df8d350996d7f82d853437d1a2562401eeac98037c2eb4c5f295319\",\"urls\":[\"bzz-raw://7d2601ac8dcd5d59b3e479a61262de2162c96ed7ad1cd161331e2e4500b8346a\",\"dweb:/ipfs/QmWVjBSvHFg9W5zsSxgdpNSYKgfLa28fr3mPjjKQaDBxmk\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/VendingMachineAuthority.sol\":{\"keccak256\":\"0x7ad8a2cee5e6bbc187d04b147dc0d2bc2ae12bb8c3680870be9013dd5543bfd6\",\"urls\":[\"bzz-raw://733f2370c788437b0034c40a8df07f4714009769ed8134a9c656e2a103996687\",\"dweb:/ipfs/Qma9LAGQDzyUvsbhLx3FUKRCx3FmnoZuMxG4SUdjLr8bRm\"]},\"@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol\":{\"keccak256\":\"0x8f1edc0a2dfb4d167d190989ebc1c4256664e50ec1f82dfaeb25fa5d4a76a35a\",\"urls\":[\"bzz-raw://e815868907cc082fee1e3964be7de12da2161863d68dd1532a74e3a97bacf533\",\"dweb:/ipfs/Qmd8DqutKSwxh38WWA1ydftNkiAxSD9sqxa7qf1asHKA8c\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol\":{\"keccak256\":\"0x461cc52e40ba53e646f5c9505b992baa3d5b3c98ae5718561e61b3bc6c726d52\",\"urls\":[\"bzz-raw://90cf2e608b660671642a616ec044e2a39e8ceb7079315b6133ec978c47af9f98\",\"dweb:/ipfs/QmX4hyYS99RYWiQ7BwLXuvQpU5x62YbjJWLgYFwrPkYbzT\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\":{\"keccak256\":\"0x43451fdb4c4d55c01122411a4cf89a5c544c2bd4b646ee1d1f306626275324bf\",\"urls\":[\"bzz-raw://db93f07c32fa294d416aaab1b19a205772f2a3fa573fd380e5641e7770193ccf\",\"dweb:/ipfs/QmVE4y8cFKWZGKEfTM9Q3YreAArpMTTALHNr2tcvcNDnbi\"]},\"@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol\":{\"keccak256\":\"0x2fcbfa2440f69e346d5e14d960b14498f6484f83713fe7cec1ecf4abea3835a1\",\"urls\":[\"bzz-raw://4a385ef55a53dd0dcd1b687a47dbf6785580883a0be0cb10c617c338a35f3a8b\",\"dweb:/ipfs/QmZp9AT146beL3SoETJCWsJ4zzAZQavy9oGCYPiwAofEtq\"]},\"@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol\":{\"keccak256\":\"0x22d34c04c68c2a77ee83e2ef3756f6e6bad6ad675560d777e612315d7eb83935\",\"urls\":[\"bzz-raw://b642c61be1d34e153e4f9cc139291fa26f4ecf31a3acc5b960aad20f4f689eeb\",\"dweb:/ipfs/QmWADdVTCSyvtgb76AxFFkAr9h9jbY57Mj5X6xiEqCqmMu\"]},\"@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol\":{\"keccak256\":\"0x9af3b3f36de63e95977f09548617989e391b3c511cf0383ee35cefd5da7d3bfd\",\"urls\":[\"bzz-raw://97ce025c7d18540e4c24578db61cc5e33828be8e9a82b5cb5f46c99212f75ed1\",\"dweb:/ipfs/QmRrdWnd95rgCZzeaNiU4KUcGe1j7oDBj7LatpXhUmjbEE\"]},\"openzeppelin-solidity/contracts/drafts/Counters.sol\":{\"keccak256\":\"0x5eb69360d3441ab2ee799bd7c007cccbffb0896f12b2dfe1456193e2aa180a11\",\"urls\":[\"bzz-raw://072e8b5a1b5acfc2acba9b6fb87d1dc57065aad44572617ad46b014074969eb3\",\"dweb:/ipfs/QmVTDHUriaxBJqiWCWgWC8vYaYYfXSz883LsowzTx1DcpK\"]},\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xac2eacd7e7762e275442f28f21d821544df5aae2ed7698af13be8c41b7005e2e\",\"urls\":[\"bzz-raw://8bdbefb642e7b08535c66bbf074e576cfef2300cdf910c1e0b211f6393833a28\",\"dweb:/ipfs/QmQhfx2Ufr8a2gFXm3KogL66xGgAuAWMwcamkWFKGG6Vya\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzz-raw://b40442c5b350b57b88a081a1eacd2bac962d4ecc1f029f5447a18986f08f6f14\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x852793a3c2f86d336a683b30d688ec3dcfc57451af5a2bf5975cda3b7191a901\",\"urls\":[\"bzz-raw://4f5b57664069671648fb81f55b0082faecdf1b2f159eec6b1fa6cef9b7d73bc5\",\"dweb:/ipfs/QmcyytaLs7zFdb4Uu7C5PmQRhQdB3wA3fUdkV6mkYfdDFH\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0xc61b3603089b09a730d8ca72e9133a496cc4405da40e9b87c12f073245d774bf\",\"urls\":[\"bzz-raw://de8bb0003d53de236913f0e0102e7a9d015e02098f2495edd000f207fe2be2f4\",\"dweb:/ipfs/QmbtwNwAJEehWWL7yGGyyMoenQvcqtz91pqLgQPpLRoLYC\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzz-raw://d0abb99bb8bfc2bc0a89902b8ed1dc0442ad08cc78cee64c291b3df6a27bcccc\",\"dweb:/ipfs/QmP5NaEwZthQeM2ESz4WTT3osrP7jhbvu7ocbttBi2JAw6\"]},\"openzeppelin-solidity/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0xf151df411bbf4eaef1fc8e8480cd10c2cd985f1a36517e63981517610213efc1\",\"urls\":[\"bzz-raw://2a277b3cc3a1a03af5c039bc75cd16bb2d23b529cb2564cc0bea1b1e0eb4dd68\",\"dweb:/ipfs/QmNRxggY8qmjjuLnxggRqE8uBueuCktLwi9YYHagWoaEJ8\"]},\"openzeppelin-solidity/contracts/token/ERC721/ERC721Metadata.sol\":{\"keccak256\":\"0xe5e28b1a405164faa98f8ecd8ed2b00907b89e3d58b2b2bb8ac8b12bc5714489\",\"urls\":[\"bzz-raw://0d5d3f0caa7e7ec91f8a2894e1a6a3513a0c79aa91a498ebf8fdbdd07c12286f\",\"dweb:/ipfs/QmP7r4jQMRxXb5JHy5V9bgMz5FmTezcSDd7ivyzJN88pTR\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xce48937a8007c580b8e2e35705738c922dd17540de89ebee6df06d2917a3f9fc\",\"urls\":[\"bzz-raw://1d117265103ee3efcd454d3aafb3e79a115f9bca6dec78a1229558eb30d14d05\",\"dweb:/ipfs/QmTm5Z1c7zzPiG3Cfj1eBMB23AeiEFGgvmTFQVaeEWXVCw\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0x2b2b99dc7fe8fcd1f9427d00822b99cbc683dc21f5dd7532bd7e2281fd2c2ca2\",\"urls\":[\"bzz-raw://a8024c00e34efaf328f9592e76823c79f25fa0f6006bdf4a1e7fea204afd4773\",\"dweb:/ipfs/QmZns9jTr7843njq3J2iL2LLoWXK5mdzN1bDGd9GL3ahhD\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xadbfb7028fb0f851dc848a48b9e54e7c89ffd2c2edc12fa4ba9bb383dfaa83d9\",\"urls\":[\"bzz-raw://90dceab42713246639100b87d6650037d68e4a2ab2dd4b5768c3ed35d6b3a4a0\",\"dweb:/ipfs/QmQ42UW5nchMoYP9bU9F1AJga5chG8j92fCPkURpiDKsCu\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1\",\"urls\":[\"bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf\",\"dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3\"]}},\"version\":1}",
  "bytecode": "0x614c9d610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061009d5760003560e01c80636c7e2b9d116100705780636c7e2b9d146102165780638736f7c214610487578063936b9ac5146104b1578063d806ee70146105f3578063d953c02b146106c55761009d565b806304bfa277146100a25780632cac94ef146100ce5780632d0c21bf146101955780633c686baa146101d7575b600080fd5b8180156100ae57600080fd5b506100cc600480360360208110156100c557600080fd5b50356106fa565b005b8180156100da57600080fd5b506100cc600480360360608110156100f157600080fd5b8135916001600160c01b031960208201351691810190606081016040820135600160201b81111561012157600080fd5b82018360208201111561013357600080fd5b803590602001918460018302840111600160201b8311171561015457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061089d945050505050565b8180156101a157600080fd5b506100cc600480360360608110156101b857600080fd5b508035906001600160c01b0319602082013581169160400135166108ae565b8180156101e357600080fd5b506100cc600480360360808110156101fa57600080fd5b5080359060ff602082013516906040810135906060013561103c565b81801561022257600080fd5b506100cc600480360361010081101561023a57600080fd5b8135916001600160e01b031960208201351691810190606081016040820135600160201b81111561026a57600080fd5b82018360208201111561027c57600080fd5b803590602001918460018302840111600160201b8311171561029d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156102ef57600080fd5b82018360208201111561030157600080fd5b803590602001918460018302840111600160201b8311171561032257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b0319853516959094909350604081019250602001359050600160201b81111561038657600080fd5b82018360208201111561039857600080fd5b803590602001918460018302840111600160201b831117156103b957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561041357600080fd5b82018360208201111561042557600080fd5b803590602001918460018302840111600160201b8311171561044657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113e3945050505050565b81801561049357600080fd5b506100cc600480360360208110156104aa57600080fd5b50356118f6565b6105e1600480360360608110156104c757600080fd5b81359190810190604081016020820135600160201b8111156104e857600080fd5b8201836020820111156104fa57600080fd5b803590602001918460018302840111600160201b8311171561051b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561056d57600080fd5b82018360208201111561057f57600080fd5b803590602001918460018302840111600160201b831117156105a057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a48945050505050565b60408051918252519081900360200190f35b8180156105ff57600080fd5b506100cc6004803603608081101561061657600080fd5b8135916001600160c01b031960208201351691810190606081016040820135600160201b81111561064657600080fd5b82018360208201111561065857600080fd5b803590602001918460018302840111600160201b8311171561067957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150611d759050565b6105e1600480360360608110156106db57600080fd5b508035906001600160c01b031960208201358116916040013516611dfb565b8073__DepositStates_________________________63cb4536ad90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561074b57600080fd5b505af415801561075f573d6000803e3d6000fd5b505050506040513d602081101561077557600080fd5b50516107b25760405162461bcd60e51b8152600401808060200182810382526029815260200180614a396029913960400191505060405180910390fd5b61083673__TBTCConstants_________________________635480b4b26040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f957600080fd5b505af415801561080d573d6000803e3d6000fd5b505050506040513d602081101561082357600080fd5b505160138301549063ffffffff6121cd16565b4211610889576040805162461bcd60e51b815260206004820152601b60248201527f50726f6f662074696d657220686173206e6f7420656c61707365640000000000604482015290519081900360640190fd5b61089a81600063ffffffff61223016565b50565b6108a983838333612586565b505050565b8273__DepositStates_________________________63cb4536ad90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156108ff57600080fd5b505af4158015610913573d6000803e3d6000fd5b505050506040513d602081101561092957600080fd5b50516109665760405162461bcd60e51b8152600401808060200182810382526034815260200180614b256034913960400191505060405180910390fd5b6109ea73__TBTCConstants_________________________63f653c0b96040518163ffffffff1660e01b815260040160206040518083038186803b1580156109ad57600080fd5b505af41580156109c1573d6000803e3d6000fd5b505050506040513d60208110156109d757600080fd5b505160138501549063ffffffff6121cd16565b421015610a3e576040805162461bcd60e51b815260206004820152601e60248201527f46656520696e637265617365206e6f7420796574207065726d69747465640000604482015290519081900360640190fd5b6000610a4b848484611dfb565b905073__TBTCConstants_________________________638446bd386040518163ffffffff1660e01b815260040160206040518083038186803b158015610a9157600080fd5b505af4158015610aa5573d6000803e3d6000fd5b505050506040513d6020811015610abb57600080fd5b5051811015610b375773__TBTCConstants_________________________638446bd386040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0857600080fd5b505af4158015610b1c573d6000803e3d6000fd5b505050506040513d6020811015610b3257600080fd5b505190505b610bc4818573__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b8c57600080fd5b505af4158015610ba0573d6000803e3d6000fd5b505050506040513d6020811015610bb657600080fd5b50519063ffffffff612d2216565b601285015560178401805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152600093610d7e9391929091830182828015610c5a5780601f10610c2f57610100808354040283529160200191610c5a565b820191906000526020600020905b815481529060010190602001808311610c3d57829003601f168201915b50506040805163706fec0d60e11b8152600481018c9052905173__DepositUtils__________________________945063e0dfd81a935060248083019350602092829003018186803b158015610caf57600080fd5b505af4158015610cc3573d6000803e3d6000fd5b505050506040513d6020811015610cd957600080fd5b50516015880154601089018054604080516020601f6002600019600187161561010002019095169490940493840181900481028201810190925282815260c09490941b938a9390929091830182828015610d745780601f10610d4957610100808354040283529160200191610d74565b820191906000526020600020905b815481529060010190602001808311610d5757829003601f168201915b5050505050612d7f565b426013870155601486018190559050610d978582612fa2565b8473__DepositStates_________________________63429fcb0d90916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015610de857600080fd5b505af4158015610dfc573d6000803e3d6000fd5b505050508473__OutsourceDepositLogging_______________6305cf110a909133848973__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610e7057600080fd5b505af4158015610e84573d6000803e3d6000fd5b505050506040513d6020811015610e9a57600080fd5b81019080805190602001909291905050508a6010018b601201548c6017016040518863ffffffff1660e01b815260040180888152602001876001600160a01b03166001600160a01b031681526020018681526020018581526020018060200184815260200180602001838103835286818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015610f845780601f10610f5957610100808354040283529160200191610f84565b820191906000526020600020905b815481529060010190602001808311610f6757829003601f168201915b5050838103825284546002600019610100600184161502019091160480825260209091019085908015610ff85780601f10610fcd57610100808354040283529160200191610ff8565b820191906000526020600020905b815481529060010190602001808311610fdb57829003601f168201915b5050995050505050505050505060006040518083038186803b15801561101d57600080fd5b505af4158015611031573d6000803e3d6000fd5b505050505050505050565b8373__DepositStates_________________________63ef2bd3d090916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561108d57600080fd5b505af41580156110a1573d6000803e3d6000fd5b505050506040513d60208110156110b757600080fd5b50516110f45760405162461bcd60e51b8152600401808060200182810382526022815260200180614b036022913960400191505060405180910390fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08111156111535760405162461bcd60e51b815260040180806020018281038252604c815260200180614be6604c913960600191505060405180910390fd5b6112ab84601401548484848873__DepositUtils__________________________63db08d91990916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156111af57600080fd5b505af41580156111c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156111ec57600080fd5b8101908080516040519392919084600160201b82111561120b57600080fd5b90830190602082018581111561122057600080fd5b8251600160201b81118282018810171561123957600080fd5b82525081516020918201929091019080838360005b8381101561126657818101518382015260200161124e565b50505050905090810190601f1680156112935780820380516001836020036101000a031916815260200191505b5060405250505061301f90949392919063ffffffff16565b6112f0576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b8373__DepositStates_________________________63a6fd0b5690916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561134157600080fd5b505af4158015611355573d6000803e3d6000fd5b50505050601484015460408051634f4dbb1b60e11b815260048101879052602481019290925260448201849052606482018390525173__OutsourceDepositLogging_______________91639e9b7636916084808301926000929190829003018186803b1580156113c557600080fd5b505af41580156113d9573d6000803e3d6000fd5b5050505050505050565b6000808973__DepositStates_________________________63e0dfa4b390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561143757600080fd5b505af415801561144b573d6000803e3d6000fd5b505050506040513d602081101561146157600080fd5b505161149e5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a626032913960400191505060405180910390fd5b6114a98a8989611a48565b905061159c8989898960405160200180856001600160e01b0319166001600160e01b031916815260040184805190602001908083835b602083106114fe5780518252601f1990920191602091820191016114df565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106115465780518252601f199092019160209182019101611527565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160e01b0319166001600160e01b03191681526004019450505050506040516020818303038152906040526130f4565b91508973__DepositUtils__________________________63f846f3719091848888886040518663ffffffff1660e01b8152600401808681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015611621578181015183820152602001611609565b50505050905090810190601f16801561164e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611681578181015183820152602001611669565b50505050905090810190601f1680156116ae5780820380516001836020036101000a031916815260200191505b5097505050505050505060006040518083038186803b1580156116d057600080fd5b505af41580156116e4573d6000803e3d6000fd5b505050508960120154611742828c73__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b8c57600080fd5b111561178c576040805162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0819995948185b5bdd5b9d60621b604482015290519081900360640190fd5b6117958a613227565b61179e8a613444565b6117a78a61348d565b8973__DepositStates_________________________63f09911ee90916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156117f857600080fd5b505af415801561180c573d6000803e3d6000fd5b505050508973__DepositUtils__________________________63a22b061490916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561186157600080fd5b505af4158015611875573d6000803e3d6000fd5b505060408051630b2d230b60e41b8152600481018e905260248101869052905173__OutsourceDepositLogging_______________935063b2d230b092506044808301926000929190829003018186803b1580156118d257600080fd5b505af41580156118e6573d6000803e3d6000fd5b5050505050505050505050505050565b8073__DepositStates_________________________63ef2bd3d090916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561194757600080fd5b505af415801561195b573d6000803e3d6000fd5b505050506040513d602081101561197157600080fd5b50516119ae5760405162461bcd60e51b8152600401808060200182810382526022815260200180614b036022913960400191505060405180910390fd5b6119f573__TBTCConstants_________________________63d891dcdb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f957600080fd5b4211610889576040805162461bcd60e51b815260206004820152601f60248201527f5369676e61747572652074696d657220686173206e6f7420656c617073656400604482015290519081900360640190fd5b6000611a53836135cb565b611aa4576040805162461bcd60e51b815260206004820152601d60248201527f696e76616c696420696e70757420766563746f722070726f7669646564000000604482015290519081900360640190fd5b611aad8261367d565b611afe576040805162461bcd60e51b815260206004820152601e60248201527f696e76616c6964206f757470757420766563746f722070726f76696465640000604482015290519081900360640190fd5b6060611b19600180865103866137229092919063ffffffff16565b9050846017016040518082805460018160011615610100020316600290048015611b7a5780601f10611b58576101008083540402835291820191611b7a565b820191906000526020600020905b815481529060010190602001808311611b66575b50509150506040518091039020611b90826137dc565b8051906020012014611be9576040805162461bcd60e51b815260206004820152601860248201527f5478207370656e6473207468652077726f6e67205554584f0000000000000000604482015290519081900360640190fd5b6060611c04600180865103866137229092919063ffffffff16565b60108701805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529394506060939291830182828015611c925780601f10611c6757610100808354040283529160200191611c92565b820191906000526020600020905b815481529060010190602001808311611c7557829003601f168201915b505050505090508660100180546001816001161561010002031660029004905060088351031015611cf45760405162461bcd60e51b81526004018080602001828103825260398152602001806149db6039913960400191505060405180910390fd5b80516020820181902090611d1290849060089063ffffffff61372216565b8051906020012014611d555760405162461bcd60e51b8152600401808060200182810382526025815260200180614a146025913960400191505060405180910390fd5b611d5e826137f1565b67ffffffffffffffff1693505050505b9392505050565b6002840154604080516323b872dd60e01b81523360048201526001600160a01b038481166024830152306044830152915191909216916323b872dd91606480830192600092919082900301818387803b158015611dd157600080fd5b505af1158015611de5573d6000803e3d6000fd5b50505050611df584848484612586565b50505050565b6040805163406af69560e01b81526001600160c01b0319841660048201529051600091829173__DepositUtils__________________________9163406af695916024808301926020929190829003018186803b158015611e5b57600080fd5b505af4158015611e6f573d6000803e3d6000fd5b505050506040513d6020811015611e8557600080fd5b50516040805163406af69560e01b81526001600160c01b031986166004820152905191925073__DepositUtils__________________________9163406af69591602480820192602092909190829003018186803b158015611ee657600080fd5b505af4158015611efa573d6000803e3d6000fd5b505050506040513d6020811015611f1057600080fd5b50516011860154909250611f2a828463ffffffff612d2216565b14611f7c576040805162461bcd60e51b815260206004820152601760248201527f4e6f7420616e20616c6c6f776564206665652073746570000000000000000000604482015290519081900360640190fd5b60178501805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181526000936120fc939192909183018282801561200d5780601f10611fe25761010080835404028352916020019161200d565b820191906000526020600020905b815481529060010190602001808311611ff057829003601f168201915b50506040805163706fec0d60e11b8152600481018d9052905173__DepositUtils__________________________945063e0dfd81a935060248083019350602092829003018186803b15801561206257600080fd5b505af4158015612076573d6000803e3d6000fd5b505050506040513d602081101561208c57600080fd5b5051601589015460108a018054604080516020601f6002600019600187161561010002019095169490940493840181900481028201810190925282815260c09490941b938c9390929091830182828015610d745780601f10610d4957610100808354040283529160200191610d74565b905085601301548673__DepositUtils__________________________631129a8a99091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561215c57600080fd5b505af4158015612170573d6000803e3d6000fd5b505050506040513d602081101561218657600080fd5b5051146121c45760405162461bcd60e51b8152600401808060200182810382526037815260200180614b596037913960400191505060405180910390fd5b50509392505050565b600082820183811015612227576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60408051630b97468760e31b8152600481018490528215156024820152905173__OutsourceDepositLogging_______________91635cba3438916044808301926000929190829003018186803b15801561228a57600080fd5b505af415801561229e573d6000803e3d6000fd5b5050505060006122ad8361381e565b600f8401546040805163288ac18560e21b81526004810187905290519293506001600160a01b039091169173__DepositUtils__________________________9163a22b0614916024808301926000929190829003018186803b15801561231357600080fd5b505af4158015612327573d6000803e3d6000fd5b505050508373__DepositStates_________________________63e0dfa4b390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561237c57600080fd5b505af4158015612390573d6000803e3d6000fd5b505050506040513d60208110156123a657600080fd5b505180156123b15750825b156124a3578373__DepositStates_________________________63056256a890916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561240757600080fd5b505af415801561241b573d6000803e3d6000fd5b5061243392508691508390508463ffffffff6138f216565b8373__OutsourceDepositLogging_______________6332e42f2d90916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561248457600080fd5b505af4158015612498573d6000803e3d6000fd5b505050505050612582565b6009840180546001600160a01b031916331790554260078501558215612531578373__DepositStates_________________________63c28eab4090916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561251457600080fd5b505af4158015612528573d6000803e3d6000fd5b50505050611df5565b8373__DepositStates_________________________635dd33d9990916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156113c557600080fd5b5050565b8373__DepositStates_________________________63afb8e29390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156125d757600080fd5b505af41580156125eb573d6000803e3d6000fd5b505050506040513d602081101561260157600080fd5b505161263e5760405162461bcd60e51b8152600401808060200182810382526037815260200180614c326037913960400191505060405180910390fd5b6060838360405160200180836001600160c01b0319166001600160c01b031916815260080182805190602001908083835b6020831061268e5780518252601f19909201916020918201910161266f565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052905060006126d08261393e565b511161270d5760405162461bcd60e51b81526004018080602001828103825260258152602001806149b66025913960400191505060405180910390fd5b600f850180546001600160a01b0319166001600160a01b03841617905561273385613b72565b604080516001600160c01b03198616602082015281518082036008018152602890910190915260009061276e9061276990613ee0565b613f6d565b905060006127c7828873__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b8c57600080fd5b905073__TBTCConstants_________________________6386322af76040518163ffffffff1660e01b815260040160206040518083038186803b15801561280d57600080fd5b505af4158015612821573d6000803e3d6000fd5b505050506040513d602081101561283757600080fd5b505181101561287e576040805162461bcd60e51b815260206004820152600e60248201526d46656520697320746f6f206c6f7760901b604482015290519081900360640190fd5b60028773__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156128d157600080fd5b505af41580156128e5573d6000803e3d6000fd5b505050506040513d60208110156128fb57600080fd5b50518161290457fe5b0481106129425760405162461bcd60e51b8152600401808060200182810382526035815260200180614bb16035913960400191505060405180910390fd5b60178701805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152600093612a6393919290918301828280156129d35780601f106129a8576101008083540402835291602001916129d3565b820191906000526020600020905b8154815290600101906020018083116129b657829003601f168201915b50506040805163706fec0d60e11b8152600481018f9052905173__DepositUtils__________________________945063e0dfd81a935060248083019350602092829003018186803b158015612a2857600080fd5b505af4158015612a3c573d6000803e3d6000fd5b505050506040513d6020811015612a5257600080fd5b505160158b015460c01b8a8a612d7f565b8651909150612a7b9060108a019060208901906148ed565b50601188018290556012880182905542601389015560148801819055612aa18882612fa2565b8773__DepositStates_________________________63429fcb0d90916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015612af257600080fd5b505af4158015612b06573d6000803e3d6000fd5b505050508773__OutsourceDepositLogging_______________6305cf110a909187848c73__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b7a57600080fd5b505af4158015612b8e573d6000803e3d6000fd5b505050506040513d6020811015612ba457600080fd5b81019080805190602001909291905050508b888f6017016040518863ffffffff1660e01b815260040180888152602001876001600160a01b03166001600160a01b031681526020018681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612c3b578181015183820152602001612c23565b50505050905090810190601f168015612c685780820380516001836020036101000a031916815260200191505b50838103825284546002600019610100600184161502019091160480825260209091019085908015612cdb5780601f10612cb057610100808354040283529160200191612cdb565b820191906000526020600020905b815481529060010190602001808311612cbe57829003601f168201915b5050995050505050505050505060006040518083038186803b158015612d0057600080fd5b505af4158015612d14573d6000803e3d6000fd5b505050505050505050505050565b600082821115612d79576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040805163065daa4560e21b6020808301919091526bffffffffffffffffffffffff198716602483015261222b60f21b60388301528251601a818403018152603a83019093526001600160c01b03198516605a83019081528451600094938593612e4f938993899391926062909201918401908083835b60208310612e155780518252601f199092019160209182019101612df6565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526130f4565b90506060612e5c896130f4565b898489856040516020018080600160f81b815250600401868152602001807f8cb9012517c817fead650287d61bdd9c68803b6bf9c64133dcab3e65b5a50cb981525060200185805190602001908083835b60208310612ecc5780518252601f199092019160209182019101612ead565b51815160209384036101000a600019018019909216911617905287519190930192870191508083835b60208310612f145780518252601f199092019160209182019101612ef5565b6001836020036101000a038019825116818451168082178552505050505050905001836001600160c01b0319166001600160c01b031916815260080180600081525060040182815260200180600081525060040180600160f81b815250600401955050505050506040516020818303038152906040529050612f95816130f4565b9998505050505050505050565b600a8201546040805163799cd33360e01b81526004810184905290516001600160a01b039092169163799cd3339160248082019260009290919082900301818387803b158015612ff157600080fd5b505af1158015613005573d6000803e3d6000fd5b505050600091825250601990910160205260409020429055565b600085516040146130615760405162461bcd60e51b8152600401808060200182810382526027815260200180614a946027913960400191505060405180910390fd5b600061306c87613faa565b9050600060018787878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156130cd573d6000803e3d6000fd5b5050604051601f1901516001600160a01b0390811693169290921498975050505050505050565b6000600280836040518082805190602001908083835b602083106131295780518252601f19909201916020918201910161310a565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015613168573d6000803e3d6000fd5b5050506040513d602081101561317d57600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b602083106131c95780518252601f1990920191602091820191016131aa565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015613208573d6000803e3d6000fd5b5050506040513d602081101561321d57600080fd5b505190505b919050565b600a8101546001820154604080516315100f0960e31b81526004810185905290516001600160a01b03938416939092169163095ea7b391849173__DepositUtils__________________________9163a8807848916024808301926020929190829003018186803b15801561329b57600080fd5b505af41580156132af573d6000803e3d6000fd5b505050506040513d60208110156132c557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561331657600080fd5b505af115801561332a573d6000803e3d6000fd5b505050506040513d602081101561334057600080fd5b50506001820154604080516315100f0960e31b81526004810185905290516001600160a01b0380851693635a89f8109391169173__DepositUtils__________________________9163a8807848916024808301926020929190829003018186803b1580156133ae57600080fd5b505af41580156133c2573d6000803e3d6000fd5b505050506040513d60208110156133d857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561342857600080fd5b505af115801561343c573d6000803e3d6000fd5b505050505050565b600a8101546040805163a15c3bbb60e01b815290516001600160a01b0390921691829163a15c3bbb91600480830192600092919082900301818387803b15801561342857600080fd5b600061349882613ff8565b90506001600160a01b0381166134ae575061089a565b6134b7826140fb565b6001830154604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561350457600080fd5b505afa158015613518573d6000803e3d6000fd5b505050506040513d602081101561352e57600080fd5b5051106125825760018201546001600160a01b031663a9059cbb82613552856140fb565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156135a157600080fd5b505af11580156135b5573d6000803e3d6000fd5b505050506040513d6020811015611df557600080fd5b60008060006135d984614127565b90925090508015806135ec575060001982145b156135fc57600092505050613222565b6001820160005b828110156136705785518210613620576000945050505050613222565b606061363a8384895103896137229092919063ffffffff16565b90506000613647826141b3565b90506000198114156136625760009650505050505050613222565b929092019150600101613603565b5084511492505050919050565b600080600061368b84614127565b909250905080158061369e575060001982145b156136ae57600092505050613222565b6001820160005b8281101561367057855182106136d2576000945050505050613222565b60606136ec8384895103896137229092919063ffffffff16565b905060006136f9826141e6565b90506000198114156137145760009650505050505050613222565b9290920191506001016136b5565b60608161373e5750604080516020810190915260008152611d6e565b8282018381118015613751575080855110155b613798576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b604051915082604083010160405282825283850182038460208701018481015b808210156137d1578151838301526020820191506137b8565b505050509392505050565b606061222a826000602463ffffffff61372216565b600060606137fe8361424c565b9050606061380b82613ee0565b905061381681613f6d565b949350505050565b600a810154604080516307acd5cb60e01b8152905160009247926001600160a01b039091169182916307acd5cb916004808301928892919082900301818387803b15801561386b57600080fd5b505af115801561387f573d6000803e3d6000fd5b5047925050508281116138d9576040805162461bcd60e51b815260206004820152601d60248201527f4e6f2066756e64732072656365697665642c20756e6578706563746564000000604482015290519081900360640190fd5b6138e9818463ffffffff612d2216565b95945050505050565b6001600160a01b038216600090815260188401602052604090205461391d908263ffffffff6121cd16565b6001600160a01b039092166000908152601890930160205250604090912055565b606060008260088151811061394f57fe5b0160200151835160f89190911c91506009820160ff1614613980575050604080516020810190915260008152613222565b8260098151811061398d57fe5b016020015160f81c613a305760028160ff1610156139bb575050604080516020810190915260008152613222565b600083600a815181106139ca57fe5b016020015160f81c9050600119820160ff16811415806139f75750806020141580156139f7575080601414155b15613a15576040518060200160405280600081525092505050613222565b613a2784600b8363ffffffff61372216565b92505050613222565b6000613a45846008600363ffffffff61426116565b60408051621976a960e81b81529051908190036003019020909150811415613af05783600b81518110613a7457fe5b60209101015160f81c6014141580613abf5750604051808061222b60f21b81525060020190506040518091039020613abc60028651036002876142619092919063ffffffff16565b14155b15613add576040518060200160405280600081525092505050613222565b613a2784600c601463ffffffff61372216565b604080516205ea4560ea1b81529051908190036003019020811415613b5b5783600185510381518110613b1f57fe5b60209101015160f81c608714613b48576040518060200160405280600081525092505050613222565b613a2784600b601463ffffffff61372216565b505050604080516020810190915260008152919050565b60008173__DepositUtils__________________________63ad91ce1f90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613bc557600080fd5b505af4158015613bd9573d6000803e3d6000fd5b505050506040513d6020811015613bef57600080fd5b505160408051631bf7ad3160e01b815260048101859052905191925060009173__DepositUtils__________________________91631bf7ad31916024808301926020929190829003018186803b158015613c4957600080fd5b505af4158015613c5d573d6000803e3d6000fd5b505050506040513d6020811015613c7357600080fd5b50516004840154600f8501549192506001600160a01b039081169160009182918291613ca8918991168363ffffffff6142c816565b919450925090508215613d3e576001870154604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015613d1157600080fd5b505af1158015613d25573d6000803e3d6000fd5b505050506040513d6020811015613d3b57600080fd5b50505b8115613e4f57836001600160a01b0316866001600160a01b03161415613dca57600187015460408051630852cd8d60e31b81526004810185905290516001600160a01b03909216916342966c689160248082019260009290919082900301818387803b158015613dad57600080fd5b505af1158015613dc1573d6000803e3d6000fd5b50505050613e4f565b60018701546040805163a9059cbb60e01b81526001600160a01b038981166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015613e2257600080fd5b505af1158015613e36573d6000803e3d6000fd5b505050506040513d6020811015613e4c57600080fd5b50505b8015613ed75760018701546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015613ead57600080fd5b505af1158015613ec1573d6000803e3d6000fd5b505050506040513d602081101561103157600080fd5b50505050505050565b60608082516040519080825280601f01601f191660200182016040528015613f0f576020820181803883390190505b50905060005b8351811015613f6657838181518110613f2a57fe5b602001015160f81c60f81b826001838751030381518110613f4757fe5b60200101906001600160f81b031916908160001a905350600101613f15565b5092915050565b600080805b8351811015613f66578060010184510360080260020a848281518110613f9457fe5b016020015160f81c029190910190600101613f72565b60008151604014613fec5760405162461bcd60e51b815260040180806020018281038252602d815260200180614989602d913960400191505060405180910390fd5b50805160209091012090565b600381015460408051634f558e7960e01b8152306004820152905160009283926001600160a01b0390911691634f558e7991602480820192602092909190829003018186803b15801561404a57600080fd5b505afa15801561405e573d6000803e3d6000fd5b505050506040513d602081101561407457600080fd5b50511561222a576003830154604080516331a9108f60e11b815230600482015290516001600160a01b0390921691636352211e91602480820192602092909190829003018186803b1580156140c857600080fd5b505afa1580156140dc573d6000803e3d6000fd5b505050506040513d60208110156140f257600080fd5b50519392505050565b600481015460009061222a90600160e81b900461ffff1661411b8461453f565b9063ffffffff6145d016565b60008060006141358461463a565b905060ff81166141625760008460008151811061414e57fe5b016020015190935060f81c91506141ae9050565b8060010160ff168451101561418057506000199150600090506141ae565b60006141a261276961419d87600160ff871663ffffffff61372216565b613ee0565b60ff9092169350909150505b915091565b60008060006141c1846146b6565b90925090506000198214156141dc5760001992505050613222565b0160290192915050565b60006009825110156141fb5750600019613222565b6060614216600880855103856137229092919063ffffffff16565b905060008061422483614127565b9092509050600019821415614240576000199350505050613222565b01600901915050919050565b606061222a826000600863ffffffff61372216565b60008282018381118015614276575080855110155b6142bd576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b505091016020012090565b60008060008084806142f35750856001600160a01b03166142e888614706565b6001600160a01b0316145b90506000806143018961477d565b11801561438857508773__DepositStates_________________________63761275bf90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561435a57600080fd5b505af415801561436e573d6000803e3d6000fd5b505050506040513d602081101561438457600080fd5b5051155b90508180614394575080155b6143cf5760405162461bcd60e51b8152600401808060200182810382526048815260200180614abb6048913960600191505060405180910390fd5b6000806143db8a613ff8565b6001600160a01b0316141590506000886001600160a01b03166143fd8b613ff8565b6001600160a01b031614905060006144148b6140fb565b90506000614425828686898761482f565b90506144498161443d6144378f61453f565b8961487d565b9063ffffffff6121cd16565b60018d0154604080516370a0823160e01b81523060048201529051929b506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561449c57600080fd5b505afa1580156144b0573d6000803e3d6000fd5b505050506040513d60208110156144c657600080fd5b50519050808a11156144e9576144e28a8263ffffffff612d2216565b99506144ee565b600099505b8580156144f85750845b8015614502575083155b1561450b578297505b61452d886145218581858f63ffffffff6121cd16565b9063ffffffff612d2216565b98505050505050505093509350939050565b600061222a73__TBTCConstants_________________________63ae9eb1276040518163ffffffff1660e01b815260040160206040518083038186803b15801561458857600080fd5b505af415801561459c573d6000803e3d6000fd5b505050506040513d60208110156145b257600080fd5b50516004840154600160a01b900467ffffffffffffffff1690614894565b6000808211614626576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161463157fe5b04949350505050565b60008160008151811061464957fe5b60209101015160f81c60ff141561466257506008613222565b8160008151811061466f57fe5b60209101015160f81c60fe141561468857506004613222565b8160008151811061469557fe5b60209101015160f81c60fd14156146ae57506002613222565b506000919050565b6000806025835110156146d05750600019905060006141ae565b60606146eb602480865103866137229092919063ffffffff16565b90506000806146f983614127565b9095509350505050915091565b6002810154604080516331a9108f60e11b815230600482015290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b15801561475357600080fd5b505afa158015614767573d6000803e3d6000fd5b505050506040513d602081101561321d57600080fd5b60008061480473__TBTCConstants_________________________63d565d1f16040518163ffffffff1660e01b815260040160206040518083038186803b1580156147c757600080fd5b505af41580156147db573d6000803e3d6000fd5b505050506040513d60208110156147f157600080fd5b505160168501549063ffffffff6121cd16565b9050804210156148265761481e814263ffffffff612d2216565b915050613222565b50600092915050565b60008085801561483c5750845b8015614846575082155b9050600086806148535750855b8061485b5750845b9050600081156148685788015b82156148715788015b98975050505050505050565b6000811561488d5750600061222a565b5090919050565b6000826148a35750600061222a565b828202828482816148b057fe5b04146122275760405162461bcd60e51b8152600401808060200182810382526021815260200180614b906021913960400191505060405180910390fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061492e57805160ff191683800117855561495b565b8280016001018555821561495b579182015b8281111561495b578251825591602001919060010190614940565b5061496792915061496b565b5090565b61498591905b808211156149675760008155600101614971565b9056fe5075626b6579206d7573742062652036342d62797465207261772c20756e636f6d70726573736564206b65792e4f757470757420736372697074206d7573742062652061207374616e6461726420747970654f75747075742073637269707420697320746f6f2073686f727420746f2065787472616374207468652065787065637465642073637269707454782073656e64732076616c756520746f2077726f6e67206f7574707574207363726970744e6f742063757272656e746c79206177616974696e67206120726564656d7074696f6e2070726f6f66526564656d7074696f6e2070726f6f66206f6e6c7920616c6c6f7765642066726f6d20726564656d7074696f6e20666c6f77526571756972657320756e636f6d7072657373656420756e7072656669786564207075626b65794f6e6c792054445420686f6c6465722063616e2072656465656d20756e6c657373206465706f7369742069732061742d7465726d206f7220696e20434f5552544553595f43414c4c4e6f742063757272656e746c79206177616974696e672061207369676e617475726546656520696e637265617365206f6e6c7920617661696c61626c65206166746572207369676e61747572652070726f766964656450726f76696465642070726576696f75732076616c756520646f6573206e6f74207969656c642070726576696f75732073696768617368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77496e697469616c206665652063616e6e6f74206578636565642068616c66206f6620746865206465706f73697427732076616c75654d616c6c6561626c65207369676e6174757265202d20732073686f756c6420626520696e20746865206c6f772068616c66206f6620736563703235366b312063757276652773206f72646572526564656d7074696f6e206f6e6c7920617661696c61626c652066726f6d20416374697665206f7220436f757274657379207374617465a265627a7a72315820f7c4b6a0f72f3100cb33350d93baba8b4560cb47dd29ef6e64e571ee6ca47a7064736f6c63430005110032",
  "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061009d5760003560e01c80636c7e2b9d116100705780636c7e2b9d146102165780638736f7c214610487578063936b9ac5146104b1578063d806ee70146105f3578063d953c02b146106c55761009d565b806304bfa277146100a25780632cac94ef146100ce5780632d0c21bf146101955780633c686baa146101d7575b600080fd5b8180156100ae57600080fd5b506100cc600480360360208110156100c557600080fd5b50356106fa565b005b8180156100da57600080fd5b506100cc600480360360608110156100f157600080fd5b8135916001600160c01b031960208201351691810190606081016040820135600160201b81111561012157600080fd5b82018360208201111561013357600080fd5b803590602001918460018302840111600160201b8311171561015457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061089d945050505050565b8180156101a157600080fd5b506100cc600480360360608110156101b857600080fd5b508035906001600160c01b0319602082013581169160400135166108ae565b8180156101e357600080fd5b506100cc600480360360808110156101fa57600080fd5b5080359060ff602082013516906040810135906060013561103c565b81801561022257600080fd5b506100cc600480360361010081101561023a57600080fd5b8135916001600160e01b031960208201351691810190606081016040820135600160201b81111561026a57600080fd5b82018360208201111561027c57600080fd5b803590602001918460018302840111600160201b8311171561029d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156102ef57600080fd5b82018360208201111561030157600080fd5b803590602001918460018302840111600160201b8311171561032257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b0319853516959094909350604081019250602001359050600160201b81111561038657600080fd5b82018360208201111561039857600080fd5b803590602001918460018302840111600160201b831117156103b957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561041357600080fd5b82018360208201111561042557600080fd5b803590602001918460018302840111600160201b8311171561044657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113e3945050505050565b81801561049357600080fd5b506100cc600480360360208110156104aa57600080fd5b50356118f6565b6105e1600480360360608110156104c757600080fd5b81359190810190604081016020820135600160201b8111156104e857600080fd5b8201836020820111156104fa57600080fd5b803590602001918460018302840111600160201b8311171561051b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561056d57600080fd5b82018360208201111561057f57600080fd5b803590602001918460018302840111600160201b831117156105a057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a48945050505050565b60408051918252519081900360200190f35b8180156105ff57600080fd5b506100cc6004803603608081101561061657600080fd5b8135916001600160c01b031960208201351691810190606081016040820135600160201b81111561064657600080fd5b82018360208201111561065857600080fd5b803590602001918460018302840111600160201b8311171561067957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150611d759050565b6105e1600480360360608110156106db57600080fd5b508035906001600160c01b031960208201358116916040013516611dfb565b8073__DepositStates_________________________63cb4536ad90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561074b57600080fd5b505af415801561075f573d6000803e3d6000fd5b505050506040513d602081101561077557600080fd5b50516107b25760405162461bcd60e51b8152600401808060200182810382526029815260200180614a396029913960400191505060405180910390fd5b61083673__TBTCConstants_________________________635480b4b26040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f957600080fd5b505af415801561080d573d6000803e3d6000fd5b505050506040513d602081101561082357600080fd5b505160138301549063ffffffff6121cd16565b4211610889576040805162461bcd60e51b815260206004820152601b60248201527f50726f6f662074696d657220686173206e6f7420656c61707365640000000000604482015290519081900360640190fd5b61089a81600063ffffffff61223016565b50565b6108a983838333612586565b505050565b8273__DepositStates_________________________63cb4536ad90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156108ff57600080fd5b505af4158015610913573d6000803e3d6000fd5b505050506040513d602081101561092957600080fd5b50516109665760405162461bcd60e51b8152600401808060200182810382526034815260200180614b256034913960400191505060405180910390fd5b6109ea73__TBTCConstants_________________________63f653c0b96040518163ffffffff1660e01b815260040160206040518083038186803b1580156109ad57600080fd5b505af41580156109c1573d6000803e3d6000fd5b505050506040513d60208110156109d757600080fd5b505160138501549063ffffffff6121cd16565b421015610a3e576040805162461bcd60e51b815260206004820152601e60248201527f46656520696e637265617365206e6f7420796574207065726d69747465640000604482015290519081900360640190fd5b6000610a4b848484611dfb565b905073__TBTCConstants_________________________638446bd386040518163ffffffff1660e01b815260040160206040518083038186803b158015610a9157600080fd5b505af4158015610aa5573d6000803e3d6000fd5b505050506040513d6020811015610abb57600080fd5b5051811015610b375773__TBTCConstants_________________________638446bd386040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0857600080fd5b505af4158015610b1c573d6000803e3d6000fd5b505050506040513d6020811015610b3257600080fd5b505190505b610bc4818573__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b8c57600080fd5b505af4158015610ba0573d6000803e3d6000fd5b505050506040513d6020811015610bb657600080fd5b50519063ffffffff612d2216565b601285015560178401805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152600093610d7e9391929091830182828015610c5a5780601f10610c2f57610100808354040283529160200191610c5a565b820191906000526020600020905b815481529060010190602001808311610c3d57829003601f168201915b50506040805163706fec0d60e11b8152600481018c9052905173__DepositUtils__________________________945063e0dfd81a935060248083019350602092829003018186803b158015610caf57600080fd5b505af4158015610cc3573d6000803e3d6000fd5b505050506040513d6020811015610cd957600080fd5b50516015880154601089018054604080516020601f6002600019600187161561010002019095169490940493840181900481028201810190925282815260c09490941b938a9390929091830182828015610d745780601f10610d4957610100808354040283529160200191610d74565b820191906000526020600020905b815481529060010190602001808311610d5757829003601f168201915b5050505050612d7f565b426013870155601486018190559050610d978582612fa2565b8473__DepositStates_________________________63429fcb0d90916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015610de857600080fd5b505af4158015610dfc573d6000803e3d6000fd5b505050508473__OutsourceDepositLogging_______________6305cf110a909133848973__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610e7057600080fd5b505af4158015610e84573d6000803e3d6000fd5b505050506040513d6020811015610e9a57600080fd5b81019080805190602001909291905050508a6010018b601201548c6017016040518863ffffffff1660e01b815260040180888152602001876001600160a01b03166001600160a01b031681526020018681526020018581526020018060200184815260200180602001838103835286818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015610f845780601f10610f5957610100808354040283529160200191610f84565b820191906000526020600020905b815481529060010190602001808311610f6757829003601f168201915b5050838103825284546002600019610100600184161502019091160480825260209091019085908015610ff85780601f10610fcd57610100808354040283529160200191610ff8565b820191906000526020600020905b815481529060010190602001808311610fdb57829003601f168201915b5050995050505050505050505060006040518083038186803b15801561101d57600080fd5b505af4158015611031573d6000803e3d6000fd5b505050505050505050565b8373__DepositStates_________________________63ef2bd3d090916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561108d57600080fd5b505af41580156110a1573d6000803e3d6000fd5b505050506040513d60208110156110b757600080fd5b50516110f45760405162461bcd60e51b8152600401808060200182810382526022815260200180614b036022913960400191505060405180910390fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08111156111535760405162461bcd60e51b815260040180806020018281038252604c815260200180614be6604c913960600191505060405180910390fd5b6112ab84601401548484848873__DepositUtils__________________________63db08d91990916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156111af57600080fd5b505af41580156111c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156111ec57600080fd5b8101908080516040519392919084600160201b82111561120b57600080fd5b90830190602082018581111561122057600080fd5b8251600160201b81118282018810171561123957600080fd5b82525081516020918201929091019080838360005b8381101561126657818101518382015260200161124e565b50505050905090810190601f1680156112935780820380516001836020036101000a031916815260200191505b5060405250505061301f90949392919063ffffffff16565b6112f0576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b8373__DepositStates_________________________63a6fd0b5690916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561134157600080fd5b505af4158015611355573d6000803e3d6000fd5b50505050601484015460408051634f4dbb1b60e11b815260048101879052602481019290925260448201849052606482018390525173__OutsourceDepositLogging_______________91639e9b7636916084808301926000929190829003018186803b1580156113c557600080fd5b505af41580156113d9573d6000803e3d6000fd5b5050505050505050565b6000808973__DepositStates_________________________63e0dfa4b390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561143757600080fd5b505af415801561144b573d6000803e3d6000fd5b505050506040513d602081101561146157600080fd5b505161149e5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a626032913960400191505060405180910390fd5b6114a98a8989611a48565b905061159c8989898960405160200180856001600160e01b0319166001600160e01b031916815260040184805190602001908083835b602083106114fe5780518252601f1990920191602091820191016114df565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106115465780518252601f199092019160209182019101611527565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160e01b0319166001600160e01b03191681526004019450505050506040516020818303038152906040526130f4565b91508973__DepositUtils__________________________63f846f3719091848888886040518663ffffffff1660e01b8152600401808681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015611621578181015183820152602001611609565b50505050905090810190601f16801561164e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611681578181015183820152602001611669565b50505050905090810190601f1680156116ae5780820380516001836020036101000a031916815260200191505b5097505050505050505060006040518083038186803b1580156116d057600080fd5b505af41580156116e4573d6000803e3d6000fd5b505050508960120154611742828c73__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b8c57600080fd5b111561178c576040805162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0819995948185b5bdd5b9d60621b604482015290519081900360640190fd5b6117958a613227565b61179e8a613444565b6117a78a61348d565b8973__DepositStates_________________________63f09911ee90916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156117f857600080fd5b505af415801561180c573d6000803e3d6000fd5b505050508973__DepositUtils__________________________63a22b061490916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561186157600080fd5b505af4158015611875573d6000803e3d6000fd5b505060408051630b2d230b60e41b8152600481018e905260248101869052905173__OutsourceDepositLogging_______________935063b2d230b092506044808301926000929190829003018186803b1580156118d257600080fd5b505af41580156118e6573d6000803e3d6000fd5b5050505050505050505050505050565b8073__DepositStates_________________________63ef2bd3d090916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561194757600080fd5b505af415801561195b573d6000803e3d6000fd5b505050506040513d602081101561197157600080fd5b50516119ae5760405162461bcd60e51b8152600401808060200182810382526022815260200180614b036022913960400191505060405180910390fd5b6119f573__TBTCConstants_________________________63d891dcdb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f957600080fd5b4211610889576040805162461bcd60e51b815260206004820152601f60248201527f5369676e61747572652074696d657220686173206e6f7420656c617073656400604482015290519081900360640190fd5b6000611a53836135cb565b611aa4576040805162461bcd60e51b815260206004820152601d60248201527f696e76616c696420696e70757420766563746f722070726f7669646564000000604482015290519081900360640190fd5b611aad8261367d565b611afe576040805162461bcd60e51b815260206004820152601e60248201527f696e76616c6964206f757470757420766563746f722070726f76696465640000604482015290519081900360640190fd5b6060611b19600180865103866137229092919063ffffffff16565b9050846017016040518082805460018160011615610100020316600290048015611b7a5780601f10611b58576101008083540402835291820191611b7a565b820191906000526020600020905b815481529060010190602001808311611b66575b50509150506040518091039020611b90826137dc565b8051906020012014611be9576040805162461bcd60e51b815260206004820152601860248201527f5478207370656e6473207468652077726f6e67205554584f0000000000000000604482015290519081900360640190fd5b6060611c04600180865103866137229092919063ffffffff16565b60108701805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529394506060939291830182828015611c925780601f10611c6757610100808354040283529160200191611c92565b820191906000526020600020905b815481529060010190602001808311611c7557829003601f168201915b505050505090508660100180546001816001161561010002031660029004905060088351031015611cf45760405162461bcd60e51b81526004018080602001828103825260398152602001806149db6039913960400191505060405180910390fd5b80516020820181902090611d1290849060089063ffffffff61372216565b8051906020012014611d555760405162461bcd60e51b8152600401808060200182810382526025815260200180614a146025913960400191505060405180910390fd5b611d5e826137f1565b67ffffffffffffffff1693505050505b9392505050565b6002840154604080516323b872dd60e01b81523360048201526001600160a01b038481166024830152306044830152915191909216916323b872dd91606480830192600092919082900301818387803b158015611dd157600080fd5b505af1158015611de5573d6000803e3d6000fd5b50505050611df584848484612586565b50505050565b6040805163406af69560e01b81526001600160c01b0319841660048201529051600091829173__DepositUtils__________________________9163406af695916024808301926020929190829003018186803b158015611e5b57600080fd5b505af4158015611e6f573d6000803e3d6000fd5b505050506040513d6020811015611e8557600080fd5b50516040805163406af69560e01b81526001600160c01b031986166004820152905191925073__DepositUtils__________________________9163406af69591602480820192602092909190829003018186803b158015611ee657600080fd5b505af4158015611efa573d6000803e3d6000fd5b505050506040513d6020811015611f1057600080fd5b50516011860154909250611f2a828463ffffffff612d2216565b14611f7c576040805162461bcd60e51b815260206004820152601760248201527f4e6f7420616e20616c6c6f776564206665652073746570000000000000000000604482015290519081900360640190fd5b60178501805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181526000936120fc939192909183018282801561200d5780601f10611fe25761010080835404028352916020019161200d565b820191906000526020600020905b815481529060010190602001808311611ff057829003601f168201915b50506040805163706fec0d60e11b8152600481018d9052905173__DepositUtils__________________________945063e0dfd81a935060248083019350602092829003018186803b15801561206257600080fd5b505af4158015612076573d6000803e3d6000fd5b505050506040513d602081101561208c57600080fd5b5051601589015460108a018054604080516020601f6002600019600187161561010002019095169490940493840181900481028201810190925282815260c09490941b938c9390929091830182828015610d745780601f10610d4957610100808354040283529160200191610d74565b905085601301548673__DepositUtils__________________________631129a8a99091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561215c57600080fd5b505af4158015612170573d6000803e3d6000fd5b505050506040513d602081101561218657600080fd5b5051146121c45760405162461bcd60e51b8152600401808060200182810382526037815260200180614b596037913960400191505060405180910390fd5b50509392505050565b600082820183811015612227576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60408051630b97468760e31b8152600481018490528215156024820152905173__OutsourceDepositLogging_______________91635cba3438916044808301926000929190829003018186803b15801561228a57600080fd5b505af415801561229e573d6000803e3d6000fd5b5050505060006122ad8361381e565b600f8401546040805163288ac18560e21b81526004810187905290519293506001600160a01b039091169173__DepositUtils__________________________9163a22b0614916024808301926000929190829003018186803b15801561231357600080fd5b505af4158015612327573d6000803e3d6000fd5b505050508373__DepositStates_________________________63e0dfa4b390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561237c57600080fd5b505af4158015612390573d6000803e3d6000fd5b505050506040513d60208110156123a657600080fd5b505180156123b15750825b156124a3578373__DepositStates_________________________63056256a890916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561240757600080fd5b505af415801561241b573d6000803e3d6000fd5b5061243392508691508390508463ffffffff6138f216565b8373__OutsourceDepositLogging_______________6332e42f2d90916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561248457600080fd5b505af4158015612498573d6000803e3d6000fd5b505050505050612582565b6009840180546001600160a01b031916331790554260078501558215612531578373__DepositStates_________________________63c28eab4090916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561251457600080fd5b505af4158015612528573d6000803e3d6000fd5b50505050611df5565b8373__DepositStates_________________________635dd33d9990916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156113c557600080fd5b5050565b8373__DepositStates_________________________63afb8e29390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156125d757600080fd5b505af41580156125eb573d6000803e3d6000fd5b505050506040513d602081101561260157600080fd5b505161263e5760405162461bcd60e51b8152600401808060200182810382526037815260200180614c326037913960400191505060405180910390fd5b6060838360405160200180836001600160c01b0319166001600160c01b031916815260080182805190602001908083835b6020831061268e5780518252601f19909201916020918201910161266f565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052905060006126d08261393e565b511161270d5760405162461bcd60e51b81526004018080602001828103825260258152602001806149b66025913960400191505060405180910390fd5b600f850180546001600160a01b0319166001600160a01b03841617905561273385613b72565b604080516001600160c01b03198616602082015281518082036008018152602890910190915260009061276e9061276990613ee0565b613f6d565b905060006127c7828873__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b8c57600080fd5b905073__TBTCConstants_________________________6386322af76040518163ffffffff1660e01b815260040160206040518083038186803b15801561280d57600080fd5b505af4158015612821573d6000803e3d6000fd5b505050506040513d602081101561283757600080fd5b505181101561287e576040805162461bcd60e51b815260206004820152600e60248201526d46656520697320746f6f206c6f7760901b604482015290519081900360640190fd5b60028773__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156128d157600080fd5b505af41580156128e5573d6000803e3d6000fd5b505050506040513d60208110156128fb57600080fd5b50518161290457fe5b0481106129425760405162461bcd60e51b8152600401808060200182810382526035815260200180614bb16035913960400191505060405180910390fd5b60178701805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152600093612a6393919290918301828280156129d35780601f106129a8576101008083540402835291602001916129d3565b820191906000526020600020905b8154815290600101906020018083116129b657829003601f168201915b50506040805163706fec0d60e11b8152600481018f9052905173__DepositUtils__________________________945063e0dfd81a935060248083019350602092829003018186803b158015612a2857600080fd5b505af4158015612a3c573d6000803e3d6000fd5b505050506040513d6020811015612a5257600080fd5b505160158b015460c01b8a8a612d7f565b8651909150612a7b9060108a019060208901906148ed565b50601188018290556012880182905542601389015560148801819055612aa18882612fa2565b8773__DepositStates_________________________63429fcb0d90916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015612af257600080fd5b505af4158015612b06573d6000803e3d6000fd5b505050508773__OutsourceDepositLogging_______________6305cf110a909187848c73__DepositUtils__________________________637b1993d490916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612b7a57600080fd5b505af4158015612b8e573d6000803e3d6000fd5b505050506040513d6020811015612ba457600080fd5b81019080805190602001909291905050508b888f6017016040518863ffffffff1660e01b815260040180888152602001876001600160a01b03166001600160a01b031681526020018681526020018581526020018060200184815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612c3b578181015183820152602001612c23565b50505050905090810190601f168015612c685780820380516001836020036101000a031916815260200191505b50838103825284546002600019610100600184161502019091160480825260209091019085908015612cdb5780601f10612cb057610100808354040283529160200191612cdb565b820191906000526020600020905b815481529060010190602001808311612cbe57829003601f168201915b5050995050505050505050505060006040518083038186803b158015612d0057600080fd5b505af4158015612d14573d6000803e3d6000fd5b505050505050505050505050565b600082821115612d79576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040805163065daa4560e21b6020808301919091526bffffffffffffffffffffffff198716602483015261222b60f21b60388301528251601a818403018152603a83019093526001600160c01b03198516605a83019081528451600094938593612e4f938993899391926062909201918401908083835b60208310612e155780518252601f199092019160209182019101612df6565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526130f4565b90506060612e5c896130f4565b898489856040516020018080600160f81b815250600401868152602001807f8cb9012517c817fead650287d61bdd9c68803b6bf9c64133dcab3e65b5a50cb981525060200185805190602001908083835b60208310612ecc5780518252601f199092019160209182019101612ead565b51815160209384036101000a600019018019909216911617905287519190930192870191508083835b60208310612f145780518252601f199092019160209182019101612ef5565b6001836020036101000a038019825116818451168082178552505050505050905001836001600160c01b0319166001600160c01b031916815260080180600081525060040182815260200180600081525060040180600160f81b815250600401955050505050506040516020818303038152906040529050612f95816130f4565b9998505050505050505050565b600a8201546040805163799cd33360e01b81526004810184905290516001600160a01b039092169163799cd3339160248082019260009290919082900301818387803b158015612ff157600080fd5b505af1158015613005573d6000803e3d6000fd5b505050600091825250601990910160205260409020429055565b600085516040146130615760405162461bcd60e51b8152600401808060200182810382526027815260200180614a946027913960400191505060405180910390fd5b600061306c87613faa565b9050600060018787878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156130cd573d6000803e3d6000fd5b5050604051601f1901516001600160a01b0390811693169290921498975050505050505050565b6000600280836040518082805190602001908083835b602083106131295780518252601f19909201916020918201910161310a565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015613168573d6000803e3d6000fd5b5050506040513d602081101561317d57600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b602083106131c95780518252601f1990920191602091820191016131aa565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015613208573d6000803e3d6000fd5b5050506040513d602081101561321d57600080fd5b505190505b919050565b600a8101546001820154604080516315100f0960e31b81526004810185905290516001600160a01b03938416939092169163095ea7b391849173__DepositUtils__________________________9163a8807848916024808301926020929190829003018186803b15801561329b57600080fd5b505af41580156132af573d6000803e3d6000fd5b505050506040513d60208110156132c557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561331657600080fd5b505af115801561332a573d6000803e3d6000fd5b505050506040513d602081101561334057600080fd5b50506001820154604080516315100f0960e31b81526004810185905290516001600160a01b0380851693635a89f8109391169173__DepositUtils__________________________9163a8807848916024808301926020929190829003018186803b1580156133ae57600080fd5b505af41580156133c2573d6000803e3d6000fd5b505050506040513d60208110156133d857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561342857600080fd5b505af115801561343c573d6000803e3d6000fd5b505050505050565b600a8101546040805163a15c3bbb60e01b815290516001600160a01b0390921691829163a15c3bbb91600480830192600092919082900301818387803b15801561342857600080fd5b600061349882613ff8565b90506001600160a01b0381166134ae575061089a565b6134b7826140fb565b6001830154604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561350457600080fd5b505afa158015613518573d6000803e3d6000fd5b505050506040513d602081101561352e57600080fd5b5051106125825760018201546001600160a01b031663a9059cbb82613552856140fb565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156135a157600080fd5b505af11580156135b5573d6000803e3d6000fd5b505050506040513d6020811015611df557600080fd5b60008060006135d984614127565b90925090508015806135ec575060001982145b156135fc57600092505050613222565b6001820160005b828110156136705785518210613620576000945050505050613222565b606061363a8384895103896137229092919063ffffffff16565b90506000613647826141b3565b90506000198114156136625760009650505050505050613222565b929092019150600101613603565b5084511492505050919050565b600080600061368b84614127565b909250905080158061369e575060001982145b156136ae57600092505050613222565b6001820160005b8281101561367057855182106136d2576000945050505050613222565b60606136ec8384895103896137229092919063ffffffff16565b905060006136f9826141e6565b90506000198114156137145760009650505050505050613222565b9290920191506001016136b5565b60608161373e5750604080516020810190915260008152611d6e565b8282018381118015613751575080855110155b613798576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b604051915082604083010160405282825283850182038460208701018481015b808210156137d1578151838301526020820191506137b8565b505050509392505050565b606061222a826000602463ffffffff61372216565b600060606137fe8361424c565b9050606061380b82613ee0565b905061381681613f6d565b949350505050565b600a810154604080516307acd5cb60e01b8152905160009247926001600160a01b039091169182916307acd5cb916004808301928892919082900301818387803b15801561386b57600080fd5b505af115801561387f573d6000803e3d6000fd5b5047925050508281116138d9576040805162461bcd60e51b815260206004820152601d60248201527f4e6f2066756e64732072656365697665642c20756e6578706563746564000000604482015290519081900360640190fd5b6138e9818463ffffffff612d2216565b95945050505050565b6001600160a01b038216600090815260188401602052604090205461391d908263ffffffff6121cd16565b6001600160a01b039092166000908152601890930160205250604090912055565b606060008260088151811061394f57fe5b0160200151835160f89190911c91506009820160ff1614613980575050604080516020810190915260008152613222565b8260098151811061398d57fe5b016020015160f81c613a305760028160ff1610156139bb575050604080516020810190915260008152613222565b600083600a815181106139ca57fe5b016020015160f81c9050600119820160ff16811415806139f75750806020141580156139f7575080601414155b15613a15576040518060200160405280600081525092505050613222565b613a2784600b8363ffffffff61372216565b92505050613222565b6000613a45846008600363ffffffff61426116565b60408051621976a960e81b81529051908190036003019020909150811415613af05783600b81518110613a7457fe5b60209101015160f81c6014141580613abf5750604051808061222b60f21b81525060020190506040518091039020613abc60028651036002876142619092919063ffffffff16565b14155b15613add576040518060200160405280600081525092505050613222565b613a2784600c601463ffffffff61372216565b604080516205ea4560ea1b81529051908190036003019020811415613b5b5783600185510381518110613b1f57fe5b60209101015160f81c608714613b48576040518060200160405280600081525092505050613222565b613a2784600b601463ffffffff61372216565b505050604080516020810190915260008152919050565b60008173__DepositUtils__________________________63ad91ce1f90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613bc557600080fd5b505af4158015613bd9573d6000803e3d6000fd5b505050506040513d6020811015613bef57600080fd5b505160408051631bf7ad3160e01b815260048101859052905191925060009173__DepositUtils__________________________91631bf7ad31916024808301926020929190829003018186803b158015613c4957600080fd5b505af4158015613c5d573d6000803e3d6000fd5b505050506040513d6020811015613c7357600080fd5b50516004840154600f8501549192506001600160a01b039081169160009182918291613ca8918991168363ffffffff6142c816565b919450925090508215613d3e576001870154604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015613d1157600080fd5b505af1158015613d25573d6000803e3d6000fd5b505050506040513d6020811015613d3b57600080fd5b50505b8115613e4f57836001600160a01b0316866001600160a01b03161415613dca57600187015460408051630852cd8d60e31b81526004810185905290516001600160a01b03909216916342966c689160248082019260009290919082900301818387803b158015613dad57600080fd5b505af1158015613dc1573d6000803e3d6000fd5b50505050613e4f565b60018701546040805163a9059cbb60e01b81526001600160a01b038981166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015613e2257600080fd5b505af1158015613e36573d6000803e3d6000fd5b505050506040513d6020811015613e4c57600080fd5b50505b8015613ed75760018701546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015613ead57600080fd5b505af1158015613ec1573d6000803e3d6000fd5b505050506040513d602081101561103157600080fd5b50505050505050565b60608082516040519080825280601f01601f191660200182016040528015613f0f576020820181803883390190505b50905060005b8351811015613f6657838181518110613f2a57fe5b602001015160f81c60f81b826001838751030381518110613f4757fe5b60200101906001600160f81b031916908160001a905350600101613f15565b5092915050565b600080805b8351811015613f66578060010184510360080260020a848281518110613f9457fe5b016020015160f81c029190910190600101613f72565b60008151604014613fec5760405162461bcd60e51b815260040180806020018281038252602d815260200180614989602d913960400191505060405180910390fd5b50805160209091012090565b600381015460408051634f558e7960e01b8152306004820152905160009283926001600160a01b0390911691634f558e7991602480820192602092909190829003018186803b15801561404a57600080fd5b505afa15801561405e573d6000803e3d6000fd5b505050506040513d602081101561407457600080fd5b50511561222a576003830154604080516331a9108f60e11b815230600482015290516001600160a01b0390921691636352211e91602480820192602092909190829003018186803b1580156140c857600080fd5b505afa1580156140dc573d6000803e3d6000fd5b505050506040513d60208110156140f257600080fd5b50519392505050565b600481015460009061222a90600160e81b900461ffff1661411b8461453f565b9063ffffffff6145d016565b60008060006141358461463a565b905060ff81166141625760008460008151811061414e57fe5b016020015190935060f81c91506141ae9050565b8060010160ff168451101561418057506000199150600090506141ae565b60006141a261276961419d87600160ff871663ffffffff61372216565b613ee0565b60ff9092169350909150505b915091565b60008060006141c1846146b6565b90925090506000198214156141dc5760001992505050613222565b0160290192915050565b60006009825110156141fb5750600019613222565b6060614216600880855103856137229092919063ffffffff16565b905060008061422483614127565b9092509050600019821415614240576000199350505050613222565b01600901915050919050565b606061222a826000600863ffffffff61372216565b60008282018381118015614276575080855110155b6142bd576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b505091016020012090565b60008060008084806142f35750856001600160a01b03166142e888614706565b6001600160a01b0316145b90506000806143018961477d565b11801561438857508773__DepositStates_________________________63761275bf90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561435a57600080fd5b505af415801561436e573d6000803e3d6000fd5b505050506040513d602081101561438457600080fd5b5051155b90508180614394575080155b6143cf5760405162461bcd60e51b8152600401808060200182810382526048815260200180614abb6048913960600191505060405180910390fd5b6000806143db8a613ff8565b6001600160a01b0316141590506000886001600160a01b03166143fd8b613ff8565b6001600160a01b031614905060006144148b6140fb565b90506000614425828686898761482f565b90506144498161443d6144378f61453f565b8961487d565b9063ffffffff6121cd16565b60018d0154604080516370a0823160e01b81523060048201529051929b506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561449c57600080fd5b505afa1580156144b0573d6000803e3d6000fd5b505050506040513d60208110156144c657600080fd5b50519050808a11156144e9576144e28a8263ffffffff612d2216565b99506144ee565b600099505b8580156144f85750845b8015614502575083155b1561450b578297505b61452d886145218581858f63ffffffff6121cd16565b9063ffffffff612d2216565b98505050505050505093509350939050565b600061222a73__TBTCConstants_________________________63ae9eb1276040518163ffffffff1660e01b815260040160206040518083038186803b15801561458857600080fd5b505af415801561459c573d6000803e3d6000fd5b505050506040513d60208110156145b257600080fd5b50516004840154600160a01b900467ffffffffffffffff1690614894565b6000808211614626576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161463157fe5b04949350505050565b60008160008151811061464957fe5b60209101015160f81c60ff141561466257506008613222565b8160008151811061466f57fe5b60209101015160f81c60fe141561468857506004613222565b8160008151811061469557fe5b60209101015160f81c60fd14156146ae57506002613222565b506000919050565b6000806025835110156146d05750600019905060006141ae565b60606146eb602480865103866137229092919063ffffffff16565b90506000806146f983614127565b9095509350505050915091565b6002810154604080516331a9108f60e11b815230600482015290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b15801561475357600080fd5b505afa158015614767573d6000803e3d6000fd5b505050506040513d602081101561321d57600080fd5b60008061480473__TBTCConstants_________________________63d565d1f16040518163ffffffff1660e01b815260040160206040518083038186803b1580156147c757600080fd5b505af41580156147db573d6000803e3d6000fd5b505050506040513d60208110156147f157600080fd5b505160168501549063ffffffff6121cd16565b9050804210156148265761481e814263ffffffff612d2216565b915050613222565b50600092915050565b60008085801561483c5750845b8015614846575082155b9050600086806148535750855b8061485b5750845b9050600081156148685788015b82156148715788015b98975050505050505050565b6000811561488d5750600061222a565b5090919050565b6000826148a35750600061222a565b828202828482816148b057fe5b04146122275760405162461bcd60e51b8152600401808060200182810382526021815260200180614b906021913960400191505060405180910390fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061492e57805160ff191683800117855561495b565b8280016001018555821561495b579182015b8281111561495b578251825591602001919060010190614940565b5061496792915061496b565b5090565b61498591905b808211156149675760008155600101614971565b9056fe5075626b6579206d7573742062652036342d62797465207261772c20756e636f6d70726573736564206b65792e4f757470757420736372697074206d7573742062652061207374616e6461726420747970654f75747075742073637269707420697320746f6f2073686f727420746f2065787472616374207468652065787065637465642073637269707454782073656e64732076616c756520746f2077726f6e67206f7574707574207363726970744e6f742063757272656e746c79206177616974696e67206120726564656d7074696f6e2070726f6f66526564656d7074696f6e2070726f6f66206f6e6c7920616c6c6f7765642066726f6d20726564656d7074696f6e20666c6f77526571756972657320756e636f6d7072657373656420756e7072656669786564207075626b65794f6e6c792054445420686f6c6465722063616e2072656465656d20756e6c657373206465706f7369742069732061742d7465726d206f7220696e20434f5552544553595f43414c4c4e6f742063757272656e746c79206177616974696e672061207369676e617475726546656520696e637265617365206f6e6c7920617661696c61626c65206166746572207369676e61747572652070726f766964656450726f76696465642070726576696f75732076616c756520646f6573206e6f74207969656c642070726576696f75732073696768617368536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77496e697469616c206665652063616e6e6f74206578636565642068616c66206f6620746865206465706f73697427732076616c75654d616c6c6561626c65207369676e6174757265202d20732073686f756c6420626520696e20746865206c6f772068616c66206f6620736563703235366b312063757276652773206f72646572526564656d7074696f6e206f6e6c7920617661696c61626c652066726f6d20416374697665206f7220436f757274657379207374617465a265627a7a72315820f7c4b6a0f72f3100cb33350d93baba8b4560cb47dd29ef6e64e571ee6ca47a7064736f6c63430005110032",
  "sourceMap": "960:18387:5:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
  "deployedSourceMap": "960:18387:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18827:518;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18827:518:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18827:518:5;;:::i;:::-;;7589:367;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7589:367:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7589:367:5;;;-1:-1:-1;;;;;;7589:367:5;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;7589:367:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7589:367:5;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7589:367:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;7589:367:5;;-1:-1:-1;7589:367:5;;-1:-1:-1;;;;;7589:367:5:i;10124:1960::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10124:1960:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10124:1960:5;;;-1:-1:-1;;;;;;10124:1960:5;;;;;;;;;;;;:::i;8369:1340::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8369:1340:5;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;8369:1340:5;;;;;;;;;;;;;;;;;;;:::i;14215:1457::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14215:1457:5;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14215:1457:5;;;-1:-1:-1;;;;;;14215:1457:5;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;14215:1457:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14215:1457:5;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14215:1457:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14215:1457:5;;;;;;;;-1:-1:-1;14215:1457:5;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;14215:1457:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14215:1457:5;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14215:1457:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14215:1457:5;;-1:-1:-1;;;;;;14215:1457:5;;;;;;;;-1:-1:-1;14215:1457:5;;;;-1:-1:-1;14215:1457:5;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;14215:1457:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14215:1457:5;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14215:1457:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14215:1457:5;;;;;;;;;-1:-1:-1;14215:1457:5;;;;-1:-1:-1;14215:1457:5;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;14215:1457:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14215:1457:5;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14215:1457:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14215:1457:5;;-1:-1:-1;14215:1457:5;;-1:-1:-1;;;;;14215:1457:5:i;18085:517::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18085:517:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18085:517:5;;:::i;16646:1221::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16646:1221:5;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;16646:1221:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16646:1221:5;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;16646:1221:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16646:1221:5;;;;;;;;-1:-1:-1;16646:1221:5;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;16646:1221:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16646:1221:5;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;16646:1221:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16646:1221:5;;-1:-1:-1;16646:1221:5;;-1:-1:-1;;;;;16646:1221:5:i;:::-;;;;;;;;;;;;;;;;6541:566;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6541:566:5;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6541:566:5;;;-1:-1:-1;;;;;;6541:566:5;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6541:566:5;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6541:566:5;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6541:566:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;6541:566:5;;-1:-1:-1;;;6541:566:5;;-1:-1:-1;;;;;6541:566:5;;-1:-1:-1;6541:566:5;;-1:-1:-1;6541:566:5:i;12090:1225::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12090:1225:5;;;-1:-1:-1;;;;;;12090:1225:5;;;;;;;;;;;;:::i;18827:518::-;18951:2;:28;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18951:30:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18951:30:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18951:30:5;18930:118;;;;-1:-1:-1;;;18930:118:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19113:109;19163:13;:39;:41;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19163:41:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19163:41:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19163:41:5;19113:24;;;;;:109;:28;:109;:::i;:::-;19079:15;:143;19058:217;;;;;-1:-1:-1;;;19058:217:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;19285:26;:2;19305:5;19285:26;:19;:26;:::i;:::-;18827:518;:::o;7589:367::-;7815:134;7847:2;7863:17;7894:21;7929:10;7815:18;:134::i;:::-;7589:367;;;:::o;10124:1960::-;10319:2;:28;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10319:30:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10319:30:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10319:30:5;10298:129;;;;-1:-1:-1;;;10298:129:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10493:103;10543:13;:33;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10543:35:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10543:35:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10543:35:5;10493:24;;;;;:103;:28;:103;:::i;:::-;10458:15;:138;;10437:215;;;;;-1:-1:-1;;;10437:215:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;10663:23;10701:142;10746:2;10766:25;10809:20;10701:27;:142::i;:::-;10663:180;;11076:13;:33;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11076:35:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11076:35:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11076:35:5;11058:53;;11054:137;;;11145:13;:33;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11145:35:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11145:35:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11145:35:5;;-1:-1:-1;11054:137:5;11226:35;11245:15;11226:2;:12;;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11226:14:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11226:14:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11226:14:5;;:35;:18;:35;:::i;:::-;11201:22;;;:60;11392:15;;;11341:226;;;;;;;;;;;;;-1:-1:-1;;11341:226:5;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11341:226:5;;;;11392:15;;11341:226;;11392:15;11341:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11425:14:5;;;-1:-1:-1;;;11425:14:5;;;;;;;;;;:12;;-1:-1:-1;11425:12:5;;-1:-1:-1;11425:14:5;;;;;-1:-1:-1;11425:14:5;;;;;;;:12;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;11425:14:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11425:14:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11425:14:5;11457:17;;;;11530:23;;;11341:226;;;;;11425:14;11341:226;;-1:-1:-1;;11457:17:5;11341:226;;;11457:17;11341:226;;;;;;;;;;;;;;;;;;;;;;;;;;;11457:17;;;;;;11492:20;;11341:226;;11530:23;;11341:226;;11530:23;11341:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:33;:226::i;:::-;11668:15;11641:24;;;:42;11693:22;;;:33;;;11310:257;-1:-1:-1;11737:27:5;11641:2;11310:257;11737:13;:27::i;:::-;11821:2;:33;;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11821:35:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11821:35:5;;;;11866:2;:25;;;;11905:10;11929:8;11951:2;:12;;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11951:14:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11951:14:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11951:14:5;;;;;;;;;;;;;;;;11979:2;:23;;12016:2;:22;;;12052:2;:15;;11866:211;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11866:211:5;-1:-1:-1;;;;;11866:211:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11866:211:5;;;;;;;;-1:-1:-1;;11866:211:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11866:211:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11866:211:5;;;;10124:1960;;;;;:::o;8369:1340::-;8550:2;:32;;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8550:34:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8550:34:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8550:34:5;8529:115;;;;-1:-1:-1;;;8529:115:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9151:66;9120:97;;;9099:220;;;;-1:-1:-1;;;9099:220:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9404:62;9431:2;:22;;;9455:2;9459;9463;9404;:15;;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9404:17:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9404:17:5;;;;;;39:16:-1;36:1;17:17;2:54;101:4;9404:17:5;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;9404:17:5;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;9404:17:5;;420:4:-1;411:14;;;;9404:17:5;;;;;411:14:-1;9404:17:5;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9404:17:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;;:62;;;;;;;:::i;:::-;9383:126;;;;;-1:-1:-1;;;9383:126:5;;;;;;;;;;;;-1:-1:-1;;;9383:126:5;;;;;;;;;;;;;;;9601:2;:29;;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9601:31:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;9671:22:5;;;;9642:60;;;-1:-1:-1;;;9642:60:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;;:60;;;;;-1:-1:-1;;9642:60:5;;;;;;;:28;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;9642:60:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9642:60:5;;;;8369:1340;;;;:::o;14215:1457::-;14604:13;14627:27;14686:2;:15;;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14686:17:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14686:17:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14686:17:5;14665:114;;;;-1:-1:-1;;;14665:114:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14812:110;14853:2;14869:14;14897:15;14812:27;:110::i;:::-;14790:132;;14941:168;14984:10;15008:14;15036:15;15065:11;14941:145;;;;;;-1:-1:-1;;;;;14941:145:5;;-1:-1:-1;;;;;14941:145:5;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;14941:145:5;;;;;;;;;;-1:-1:-1;14941:145:5;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14941:145:5;;;;;;;-1:-1:-1;;;;;14941:145:5;;-1:-1:-1;;;;;14941:145:5;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14941:145:5;;;:166;:168::i;:::-;14933:176;;15119:2;:21;;;;15154:5;15173:12;15199:15;15228;15119:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15119:134:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15119:134:5;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15119:134:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15119:134:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15119:134:5;;;;15330:2;:22;;;15286:39;15305:19;15286:2;:12;;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;15286:39:5;15285:67;;15264:134;;;;;-1:-1:-1;;;15264:134:5;;;;;;;;;;;;-1:-1:-1;;;15264:134:5;;;;;;;;;;;;;;;15465:23;15485:2;15465:19;:23::i;:::-;15498:14;:2;:12;:14::i;:::-;15523:24;:2;:22;:24::i;:::-;15585:2;:14;;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15585:16:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15585:16:5;;;;15611:2;:21;;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15611:23:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15644:21:5;;;-1:-1:-1;;;15644:21:5;;;;;;;;;;;;;;;;:14;;-1:-1:-1;15644:14:5;;-1:-1:-1;15644:21:5;;;;;-1:-1:-1;;15644:21:5;;;;;;;:14;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;15644:21:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15644:21:5;;;;14215:1457;;;;;;;;;;:::o;18085:517::-;18213:2;:32;;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18213:34:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18213:34:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18213:34:5;18192:115;;;;-1:-1:-1;;;18192:115:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18372:103;18422:13;:33;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;18372:103:5;18338:15;:137;18317:215;;;;;-1:-1:-1;;;18317:215:5;;;;;;;;;;;;;;;;;;;;;;;;;;;16646:1221;16826:7;16853:28;:14;:26;:28::i;:::-;16845:70;;;;;-1:-1:-1;;;16845:70:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;16946:30;:15;:28;:30::i;:::-;16925:107;;;;;-1:-1:-1;;;16925:107:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;17042:19;17076:50;17097:1;17124;17100:14;:21;:25;17076:14;:20;;:50;;;;;:::i;:::-;17042:84;;17207:2;:15;;17197:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17168:24;:6;:22;:24::i;:::-;17158:35;;;;;;:65;17137:136;;;;;-1:-1:-1;;;17137:136:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;17284:20;17319:52;17341:1;17369;17344:15;:22;:26;17319:15;:21;;:52;;;;;:::i;:::-;17418:23;;;17381:60;;;;;;;;;;;;;-1:-1:-1;;17381:60:5;;;;;;;;;;;;;;;;;;;;;;;;;;17284:87;;-1:-1:-1;17381:34:5;;:60;17418:23;17381:60;;17418:23;17381:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17494:2;:23;;:30;;;;;;;;;;;;;;;;17489:1;17472:7;:14;:18;:52;;17451:156;;;;-1:-1:-1;;;17451:156:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17715:32;;;;;;;;;17648:46;;:7;;17662:1;;17648:46;:13;:46;:::i;:::-;17638:57;;;;;;:109;17617:193;;;;-1:-1:-1;;;17617:193:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17836:22;:7;:20;:22::i;:::-;17828:31;;17820:40;;;;;16646:1221;;;;;;:::o;6541:566::-;6819:19;;;;:131;;;-1:-1:-1;;;6819:131:5;;6865:10;6819:131;;;;-1:-1:-1;;;;;6819:131:5;;;;;;;6934:4;6819:131;;;;;;:19;;;;;:32;;:131;;;;;:19;;:131;;;;;;;:19;;:131;;;5:2:-1;;;;30:1;27;20:12;5:2;6819:131:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6819:131:5;;;;6961:139;6993:2;7009:17;7040:21;7075:15;6961:18;:139::i;:::-;6541:566;;;;:::o;12090:1225::-;12439:54;;;-1:-1:-1;;;12439:54:5;;-1:-1:-1;;;;;;12439:54:5;;;;;;;;12274:23;;;;12439:12;;:27;;:54;;;;;;;;;;;;;;:12;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;12439:54:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12439:54:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12439:54:5;12521:49;;;-1:-1:-1;;;12521:49:5;;-1:-1:-1;;;;;;12521:49:5;;;;;;;;12439:54;;-1:-1:-1;12521:12:5;;:27;;:49;;;;;12439:54;;12521:49;;;;;;;;:12;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;12521:49:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12521:49:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12521:49:5;12662:23;;;;12521:49;;-1:-1:-1;12601:41:5;:20;12521:49;12601:41;:24;:41;:::i;:::-;:84;12580:154;;;;;-1:-1:-1;;;12580:154:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;12924:15;;;12873:231;;;;;;;;;;;;;-1:-1:-1;;12873:231:5;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12873:231:5;;;;12924:15;;12873:231;;12924:15;12873:231;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12957:14:5;;;-1:-1:-1;;;12957:14:5;;;;;;;;;;:12;;-1:-1:-1;12957:12:5;;-1:-1:-1;12957:14:5;;;;;-1:-1:-1;12957:14:5;;;;;;;:12;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;12957:14:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12957:14:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12957:14:5;12989:17;;;;13067:23;;;12873:231;;;;;12957:14;12873:231;;-1:-1:-1;;12989:17:5;12873:231;;;12989:17;12873:231;;;;;;;;;;;;;;;;;;;;;;;;;;;12989:17;;;;;;13024:25;;12873:231;;13067:23;;12873:231;;13067:23;12873:231;;;;;;;;;;;;;;;;;;;;;;;;;12834:270;;13203:2;:24;;;13135:2;:30;;;;13166:16;13135:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13135:48:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13135:48:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13135:48:5;:92;13114:194;;;;-1:-1:-1;;;13114:194:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12090:1225;;;;;;;:::o;834:176:60:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;-1:-1:-1;834:176:60;;;;;:::o;3214:957:4:-;3320:35;;;-1:-1:-1;;;3320:35:4;;;;;;;;;;;;;;;;;:24;;;;:35;;;;;-1:-1:-1;;3320:35:4;;;;;;;:24;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;3320:35:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3320:35:4;;;;3366:14;3383:21;:2;:19;:21::i;:::-;3440:18;;;;3515:23;;;-1:-1:-1;;;3515:23:4;;;;;;;;;;3366:38;;-1:-1:-1;;;;;;3440:18:4;;;;3515:21;;;;:23;;;;;3414;;3515;;;;;;;:21;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;3515:23:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3515:23:4;;;;3703:2;:15;;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3703:17:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3703:17:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3703:17:4;:30;;;;;3724:9;3703:30;3699:189;;;3749:2;:16;;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3749:18:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;3781:44:4;;-1:-1:-1;3781:2:4;;-1:-1:-1;3801:15:4;;-1:-1:-1;3818:6:4;3781:44;:19;:44;:::i;:::-;3839:2;:16;;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3839:18:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3839:18:4;;;;3871:7;;;;3699:189;3898:23;;;:36;;-1:-1:-1;;;;;;3898:36:4;3924:10;3898:36;;;3970:15;3944:23;;;:41;4031:134;;;;4060:2;:32;;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4060:34:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4060:34:4;;;;4031:134;;;4125:2;:27;;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;3214:957:4;;;:::o;3690:2162:5:-;3918:2;:20;;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3918:22:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3918:22:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3918:22:5;3897:124;;;;-1:-1:-1;;;3897:124:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4031:20;4083:17;4102:21;4066:58;;;;;;-1:-1:-1;;;;;4066:58:5;;-1:-1:-1;;;;;4066:58:5;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4066:58:5;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4066:58:5;;;4031:93;;4186:1;4155:21;:7;:19;:21::i;:::-;:28;:32;4134:116;;;;-1:-1:-1;;;4134:116:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4341:18;;;:30;;-1:-1:-1;;;;;;4341:30:5;-1:-1:-1;;;;;4341:30:5;;;;;4382:34;4341:18;4382:30;:34::i;:::-;4511:52;;;-1:-1:-1;;;;;;4511:52:5;;;;;;;;26:21:-1;;;4511:52:5;22:32:-1;6:49;;4511:52:5;;;;;;;4476:20;;4511:120;;:89;;:87;:89::i;:::-;:118;:120::i;:::-;4476:155;;4641:21;4665:32;4684:12;4665:2;:12;;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;4665:32:5;4641:56;;4746:13;:37;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4746:39:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4746:39:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4746:39:5;4729:56;;;4708:117;;;;;-1:-1:-1;;;4708:117:5;;;;;;;;;;;;-1:-1:-1;;;4708:117:5;;;;;;;;;;;;;;;4889:1;4872:2;:12;;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4872:14:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4872:14:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4872:14:5;:18;;;;;;4856:13;:34;4835:134;;;;-1:-1:-1;;;4835:134:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5095:15;;;5044:221;;;;;;;;;;;;;-1:-1:-1;;5044:221:5;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5044:221:5;;;;5095:15;;5044:221;;5095:15;5044:221;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5128:14:5;;;-1:-1:-1;;;5128:14:5;;;;;;;;;;:12;;-1:-1:-1;5128:12:5;;-1:-1:-1;5128:14:5;;;;;-1:-1:-1;5128:14:5;;;;;;;:12;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;5128:14:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5128:14:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5128:14:5;5160:17;;;;;;5195;5230:21;5044:33;:221::i;:::-;5313:47;;5013:252;;-1:-1:-1;5313:47:5;;:23;;;;:47;;;;;:::i;:::-;-1:-1:-1;5370:23:5;;;:39;;;5419:22;;;:38;;;5494:15;5467:24;;;:42;5519:22;;;:33;;;5563:27;5370:2;5544:8;5563:13;:27::i;:::-;5601:2;:33;;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5601:35:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5601:35:5;;;;5646:2;:25;;;;5685:9;5708:8;5730:2;:12;;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5730:14:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5730:14:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5730:14:5;;;;;;;;;;;;;;;;5758:21;5793:13;5820:2;:15;;5646:199;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5646:199:5;-1:-1:-1;;;;;5646:199:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5646:199:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5646:199:5;;;;;;;;-1:-1:-1;;5646:199:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5646:199:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5646:199:5;;;;3690:2162;;;;;;;;:::o;1274:179:60:-;1332:7;1364:1;1359;:6;;1351:49;;;;;-1:-1:-1;;;1351:49:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1422:5:60;;;1274:179::o;5832:1399:50:-;6308:127;;;-1:-1:-1;;;6308:127:50;;;;;;;;-1:-1:-1;;6308:127:50;;;;;;-1:-1:-1;;;6308:127:50;;;;;;22:32:-1;26:21;;;22:32;6:49;;6308:127:50;;;;;;-1:-1:-1;;;;;;6488:84:50;;;;;;;;;;6155:7;;6308:127;6155:7;;6488:94;;6518:12;;6558:13;;6488:84;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6488:84:50;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6488:84:50;;;:92;:94::i;:::-;6465:117;;6592:29;6693:19;:9;:17;:19::i;:::-;6853:9;6889:11;6937;7045:12;6624:557;;;;;;-1:-1:-1;;;6624:557:50;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;6624:557:50;;;;;;;;;;-1:-1:-1;6624:557:50;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6624:557:50;;;;;;;-1:-1:-1;;;;;6624:557:50;;-1:-1:-1;;;;;6624:557:50;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6624:557:50;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6624:557:50;;;6592:589;;7198:26;:16;:24;:26::i;:::-;7191:33;5832:1399;-1:-1:-1;;;;;;;;;5832:1399:50:o;2087:213:5:-;2208:14;;;;2191:46;;;-1:-1:-1;;;2191:46:5;;;;;;;;;;-1:-1:-1;;;;;2208:14:5;;;;2191:37;;:46;;;;;2208:14;;2191:46;;;;;;;;2208:14;;2191:46;;;5:2:-1;;;;30:1;27;20:12;5:2;2191:46:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;2248:27:5;;;;-1:-1:-1;2248:18:5;;;;:27;;;;;2278:15;2248:45;;2087:213::o;2470:406:50:-;2630:4;2654:7;:14;2672:2;2654:20;2646:72;;;;-1:-1:-1;;;2646:72:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2728:17;2748:26;2766:7;2748:17;:26::i;:::-;2728:46;;2784:15;2802:30;2812:7;2821:2;2825;2829;2802:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2802:30:50;;-1:-1:-1;;2802:30:50;;-1:-1:-1;;;;;2849:20:50;;;;;;;;;;2470:406;-1:-1:-1;;;;;;;;2470:406:50:o;5703:126:48:-;5760:7;5786:36;5810:10;5817:2;5810:10;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5810:10:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5810:10:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5810:10:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5810:10:48;5793:28;;;5810:10;5793:28;;;;;;;;;26:21:-1;;;22:32;;6:49;;5793:28:48;;;;;;;5786:36;;5793:28;;;;5786:36;;;;;5793:28;5786:36;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5786:36:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5786:36:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5786:36:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5786:36:48;;-1:-1:-1;5703:126:48;;;;:::o;1588:292:5:-;1711:14;;;;;1737:12;;;1774:18;;;-1:-1:-1;;;1774:18:5;;;;;;;;;;-1:-1:-1;;;;;1711:14:5;;;;1737:12;;;;:20;;1711:14;;1774:16;;;;:18;;;;;;;;;;;;;;:16;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;1774:18:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1774:18:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1774:18:5;1737:56;;;-1:-1:-1;;;;;;1737:56:5;;;;;;;-1:-1:-1;;;;;1737:56:5;;;;;;;;;;;;;;;;;;;;1774:18;;1737:56;;;;;;;-1:-1:-1;1737:56:5;;;;5:2:-1;;;;30:1;27;20:12;5:2;1737:56:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1737:56:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;1839:12:5;;;;1854:18;;;-1:-1:-1;;;1854:18:5;;;;;;;;;;-1:-1:-1;;;;;1803:27:5;;;;;;1839:12;;;1854:16;;;;:18;;;;;1737:56;;1854:18;;;;;;;:16;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;1854:18:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1854:18:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1854:18:5;1803:70;;;-1:-1:-1;;;;;;1803:70:5;;;;;;;-1:-1:-1;;;;;1803:70:5;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1803:70:5;;;;;;;-1:-1:-1;1803:70:5;;;;5:2:-1;;;;30:1;27;20:12;5:2;1803:70:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1803:70:5;;;;1588:292;;:::o;3661:162:7:-;3774:14;;;;3799:17;;;-1:-1:-1;;;3799:17:7;;;;-1:-1:-1;;;;;3774:14:7;;;;;;3799:15;;:17;;;;;3732:22;;3799:17;;;;;;;3732:22;3774:14;3799:17;;;5:2:-1;;;;30:1;27;20:12;22504:482:7;22572:25;22600:24;22621:2;22600:20;:24::i;:::-;22572:52;-1:-1:-1;;;;;;22709:31:7;;22705:68;;22756:7;;;22705:68;22877:17;22891:2;22877:13;:17::i;:::-;22836:12;;;;:37;;;-1:-1:-1;;;22836:37:7;;22867:4;22836:37;;;;;;-1:-1:-1;;;;;22836:12:7;;;;:22;;:37;;;;;;;;;;;;;;;:12;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;22836:37:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22836:37:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22836:37:7;:58;22832:148;;22910:12;;;;-1:-1:-1;;;;;22910:12:7;:21;22932:17;22951;22910:2;22951:13;:17::i;:::-;22910:59;;;;;;;;;;;;;-1:-1:-1;;;;;22910:59:7;-1:-1:-1;;;;;22910:59:7;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22910:59:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22910:59:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;19573:1058:48;19636:4;19652:22;19684:13;19734:17;19746:4;19734:11;:17::i;:::-;19708:43;;-1:-1:-1;19708:43:48;-1:-1:-1;19830:10:48;;;:43;;;-1:-1:-1;;19844:14:48;:29;19830:43;19826:86;;;19896:5;19889:12;;;;;;19826:86;19940:1;:18;;19922:15;19969:559;19993:5;19989:1;:9;19969:559;;;20092:4;:11;20081:7;:22;20077:73;;20130:5;20123:12;;;;;;;;20077:73;20225:18;20246:42;20257:7;20280;20266:4;:11;:21;20246:4;:10;;:42;;;;;:::i;:::-;20225:63;;20302:16;20321:27;20342:5;20321:20;:27::i;:::-;20302:46;;-1:-1:-1;;20366:8:48;:23;20362:74;;;20416:5;20409:12;;;;;;;;;;20362:74;20498:19;;;;;-1:-1:-1;20000:3:48;;19969:559;;;-1:-1:-1;20613:11:48;;20602:22;;-1:-1:-1;;;19573:1058:48;;;:::o;20903:1072::-;20968:4;20984:22;21016:14;21068:18;21080:5;21068:11;:18::i;:::-;21041:45;;-1:-1:-1;21041:45:48;-1:-1:-1;21166:11:48;;;:44;;;-1:-1:-1;;21181:14:48;:29;21166:44;21162:87;;;21233:5;21226:12;;;;;;21162:87;21277:1;:18;;21259:15;21306:565;21330:6;21326:1;:10;21306:565;;;21430:5;:12;21419:7;:23;21415:74;;21469:5;21462:12;;;;;;;;21415:74;21613:18;21634:44;21646:7;21670;21655:5;:12;:22;21634:5;:11;;:44;;;;;:::i;:::-;21613:65;;21692:16;21711:28;21733:5;21711:21;:28::i;:::-;21692:47;;-1:-1:-1;;21757:8:48;:23;21753:74;;;21807:5;21800:12;;;;;;;;;;21753:74;21841:19;;;;;-1:-1:-1;21338:3:48;;21306:565;;10345:924:49;10432:16;10464:12;10460:55;;-1:-1:-1;10492:12:49;;;;;;;;;-1:-1:-1;10492:12:49;;;;10460:55;10536:16;;;10570:13;;;:38;;;;;10604:4;10587:6;:13;:21;;10570:38;10562:70;;;;;-1:-1:-1;;;10562:70:49;;;;;;;;;;;;-1:-1:-1;;;10562:70:49;;;;;;;;;;;;;;;10769:4;10763:11;10756:18;;10818:7;10813:2;10808:3;10804:12;10800:26;10794:4;10787:40;10852:7;10847:3;10840:20;10979:6;10971;10967:19;10962:3;10958:29;11055:6;11050:2;11042:6;11038:15;11034:28;11099:7;11094:3;11090:17;11001:252;11130:3;11125;11122:12;11001:252;;;11234:3;11228:10;11221:4;11216:3;11212:14;11205:34;11169:2;11164:3;11160:12;11153:19;;11001:252;;;11005:116;;10652:611;;;;;;;:::o;12524:126:48:-;12593:12;12624:19;:6;12637:1;12640:2;12624:19;:12;:19;:::i;16155:246::-;16222:6;16240:21;16264:23;16279:7;16264:14;:23::i;:::-;16240:47;;16297:21;16321:27;16339:8;16321:17;:27::i;:::-;16297:51;;16372:21;16384:8;16372:11;:21::i;:::-;16358:36;16155:246;-1:-1:-1;;;;16155:246:48:o;20331:472:7:-;20514:14;;;;20539:24;;;-1:-1:-1;;;20539:24:7;;;;20395:7;;20440:21;;-1:-1:-1;;;;;20514:14:7;;;;;;20539:22;;:24;;;;;20395:7;;20539:24;;;;;;;20395:7;20514:14;20539:24;;;5:2:-1;;;;30:1;27;20:12;5:2;20539:24:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;20601:21:7;;-1:-1:-1;;;20653:34:7;;;20632:110;;;;;-1:-1:-1;;;20632:110:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;20759:37;:16;20780:15;20759:37;:20;:37;:::i;:::-;20752:44;20331:472;-1:-1:-1;;;;;20331:472:7:o;20976:274::-;-1:-1:-1;;;;;21160:57:7;;;;;;:22;;;:57;;;;;;:83;;21235:7;21160:83;:74;:83;:::i;:::-;-1:-1:-1;;;;;21122:35:7;;;;;;;:22;;;;:35;;-1:-1:-1;21122:35:7;;;;:121;20976:274::o;17257:1974:48:-;17323:12;17347:16;17372:7;17380:1;17372:10;;;;;;;;;;;;17649:14;;17372:10;;;;;;-1:-1:-1;17644:1:48;17631:14;;17366:17;17631:32;;17627:75;;-1:-1:-1;;17679:12:48;;;;;;;;;-1:-1:-1;17679:12:48;;;;17627:75;17722:7;17730:1;17722:10;;;;;;;;;;;;;;17712:1413;;17771:1;17758:10;:14;;;17754:65;;;-1:-1:-1;;17792:12:48;;;;;;;;;-1:-1:-1;17792:12:48;;;;17754:65;17832:19;17860:7;17868:2;17860:11;;;;;;;;;;;;;;;-1:-1:-1;;;18048:14:48;;17854:18;18033:29;;;;;:77;;;18067:11;18082:4;18067:19;;:42;;;;;18090:11;18105:4;18090:19;;18067:42;18029:128;;;18130:12;;;;;;;;;;;;;;;;;;18029:128;18177:30;:7;18191:2;18195:11;18177:30;:13;:30;:::i;:::-;18170:37;;;;;;17712:1413;18238:12;18253:28;:7;18276:1;18279;18253:28;:22;:28;:::i;:::-;18328:22;;;-1:-1:-1;;;18328:22:48;;;;;;;;;;;;18238:43;;-1:-1:-1;18320:30:48;;18316:799;;;18514:7;18522:2;18514:11;;;;;;;;;;;;;;;18530:4;18508:26;;;:119;;;18607:20;;;;-1:-1:-1;;;18607:20:48;;;;;;;;;;;;;;18558:45;18598:1;18581:7;:14;:18;18601:1;18558:7;:22;;:45;;;;;:::i;:::-;:69;;18508:119;18504:178;;;18651:12;;;;;;;;;;;;;;;;;;18504:178;18706:21;:7;18720:2;18724;18706:21;:13;:21;:::i;18316:799::-;18779:22;;;-1:-1:-1;;;18779:22:48;;;;;;;;;;;;18771:30;;18767:348;;;18964:7;18989:1;18972:7;:14;:18;18964:27;;;;;;;;;;;;;;;18996:4;18958:42;18954:101;;19024:12;;;;;;;;;;;;;;;;;;18954:101;19079:21;:7;19093:2;19097;19079:21;:13;:21;:::i;18767:348::-;17712:1413;-1:-1:-1;;19134:12:48;;;;;;;;;-1:-1:-1;19134:12:48;;17257:1974;;;:::o;2634:1050:5:-;2738:17;2758:2;:15;;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2758:17:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2758:17:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2758:17:5;2805:25;;;-1:-1:-1;;;2805:25:5;;;;;;;;;;2758:17;;-1:-1:-1;2785:17:5;;2805:23;;;;:25;;;;;2758:17;;2805:25;;;;;;;:23;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;2805:25:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2805:25:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2805:25:5;2872:24;;;;3075:18;;;;2805:25;;-1:-1:-1;;;;;;2872:24:5;;;;2840:29;;;;;;3041:60;;2872:2;;3075:18;2840:29;3041:60;:33;:60;:::i;:::-;2907:194;;-1:-1:-1;2907:194:5;-1:-1:-1;2907:194:5;-1:-1:-1;3116:21:5;;3112:185;;3153:12;;;;:133;;;-1:-1:-1;;;3153:133:5;;3196:10;3153:133;;;;3232:4;3153:133;;;;;;;;;;;;-1:-1:-1;;;;;3153:12:5;;;;:25;;:133;;;;;;;;;;;;;;;:12;;:133;;;5:2:-1;;;;30:1;27;20:12;5:2;3153:133:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3153:133:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;3112:185:5;3310:23;;3306:256;;3366:21;-1:-1:-1;;;;;3353:34:5;:9;-1:-1:-1;;;;;3353:34:5;;3349:203;;;3407:12;;;;:38;;;-1:-1:-1;;;3407:38:5;;;;;;;;;;-1:-1:-1;;;;;3407:12:5;;;;:17;;:38;;;;;:12;;:38;;;;;;;;:12;;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;3407:38:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3407:38:5;;;;3349:203;;;3484:12;;;;:53;;;-1:-1:-1;;;3484:53:5;;-1:-1:-1;;;;;3484:53:5;;;;;;;;;;;;;;;:12;;;;;:21;;:53;;;;;;;;;;;;;;:12;;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;3484:53:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3484:53:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;3349:203:5;3575:23;;3571:107;;3614:12;;;;:53;;;-1:-1:-1;;;3614:53:5;;-1:-1:-1;;;;;3614:53:5;;;;;;;;;;;;;;;:12;;;;;:21;;:53;;;;;;;;;;;;;;:12;;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;3614:53:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3614:53:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;3571:107:5;2634:1050;;;;;;;:::o;2548:278:48:-;2615:12;2639:22;2674:2;:9;2664:20;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;2664:20:48;87:34:-1;135:17;;-1:-1;2664:20:48;-1:-1:-1;2639:45:48;-1:-1:-1;2700:6:48;2695:98;2716:2;:9;2712:1;:13;2695:98;;;2777:2;2780:1;2777:5;;;;;;;;;;;;;;;;2746:9;2772:1;2768;2756:2;:9;:13;:17;2746:28;;;;;;;;;;;:36;-1:-1:-1;;;;;2746:36:48;;;;;;;;-1:-1:-1;2727:3:48;;2695:98;;;-1:-1:-1;2810:9:48;2548:278;-1:-1:-1;;2548:278:48:o;4382:268::-;4443:7;;;4488:131;4509:2;:9;4505:1;:13;4488:131;;;4599:1;4603;4599:5;4586:2;:9;:19;4581:1;:25;4575:1;:32;4565:2;4568:1;4565:5;;;;;;;;;;;;;;4559:49;4549:59;;;;;4520:3;;4488:131;;564:322:50;636:7;663;:14;681:2;663:20;655:78;;;;-1:-1:-1;;;655:78:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;819:18:50;;;;;;;;564:322::o;18359:410:7:-;18531:17;;;;:48;;;-1:-1:-1;;;18531:48:7;;18572:4;18531:48;;;;;;18454:15;;;;-1:-1:-1;;;;;18531:17:7;;;;:24;;:48;;;;;;;;;;;;;;;:17;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;18531:48:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18531:48:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18531:48:7;18527:190;;;18642:17;;;;:49;;;-1:-1:-1;;;18642:49:7;;18684:4;18642:49;;;;;;-1:-1:-1;;;;;18642:17:7;;;;:25;;:49;;;;;;;;;;;;;;;:17;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;18642:49:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18642:49:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18642:49:7;;18749:11;-1:-1:-1;;;18359:410:7:o;13961:137::-;14071:19;;;;14025:7;;14051:40;;-1:-1:-1;;;14071:19:7;;;;14051:15;14071:19;14051:11;:15::i;:::-;:19;:40;:19;:40;:::i;1907:424:48:-;1968:7;1977;1996:14;2013:29;2039:2;2013:25;:29::i;:::-;1996:46;-1:-1:-1;2057:13:48;;;2053:68;;2094:1;2103:2;2106:1;2103:5;;;;;;;;;;;;2086:24;;-1:-1:-1;2103:5:48;;;-1:-1:-1;2086:24:48;;-1:-1:-1;2086:24:48;2053:68;2150:8;2146:1;:12;2134:24;;:2;:9;:24;2130:78;;;-1:-1:-1;;;655:66:48;-1:-1:-1;2195:1:48;;-1:-1:-1;2174:23:48;;2130:78;2217:15;2235:53;2247:40;2265:21;:2;2274:1;2265:21;;;;:8;:21;:::i;:::-;2247:17;:40::i;2235:53::-;2298:26;;;;;-1:-1:-1;2217:71:48;;-1:-1:-1;;1907:424:48;;;;:::o;9151:372::-;9225:7;9244:22;9276:21;9341:27;9361:6;9341:19;:27::i;:::-;9307:61;;-1:-1:-1;9307:61:48;-1:-1:-1;;;9382:29:48;;9378:78;;;-1:-1:-1;;9427:18:48;;;;;;9378:78;9473:39;:43;;;9151:372;-1:-1:-1;;9151:372:48:o;13643:582::-;13719:7;13759:1;13742:7;:14;:18;13738:67;;;-1:-1:-1;;;13776:18:48;;13738:67;13814:24;13841:36;13855:1;13875;13858:7;:14;:18;13841:7;:13;;:36;;;;;:::i;:::-;13814:63;;13888:22;13920:27;13997:24;14009:11;13997;:24::i;:::-;13957:64;;-1:-1:-1;13957:64:48;-1:-1:-1;;;14036:29:48;;14032:78;;;-1:-1:-1;;14081:18:48;;;;;;;14032:78;14174:44;:5;:44;;-1:-1:-1;;13643:582:48;;;:::o;15812:126::-;15881:12;15912:19;:7;15926:1;15929;15912:19;:13;:19;:::i;16410:337:49:-;16505:14;16543:16;;;16577:13;;;:38;;;;;16611:4;16594:6;:13;:21;;16577:38;16569:70;;;;;-1:-1:-1;;;16569:70:49;;;;;;;;;;;;-1:-1:-1;;;16569:70:49;;;;;;;;;;;;;;;-1:-1:-1;;16693:28:49;;16709:2;16693:28;16683:48;;16659:82::o;24892:2373:7:-;25104:21;25139:23;25176;25224:21;25260:23;:56;;;;25307:9;-1:-1:-1;;;;;25287:29:7;:16;25300:2;25287:12;:16::i;:::-;-1:-1:-1;;;;;25287:29:7;;25260:56;25224:92;;25326:12;25361:1;25341:17;25355:2;25341:13;:17::i;:::-;:21;:45;;;;;25367:2;:17;;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25367:19:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25367:19:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25367:19:7;25366:20;25341:45;25326:60;;25418:16;:28;;;;25439:7;25438:8;25418:28;25397:147;;;;-1:-1:-1;;;25397:147:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25555:14;;25572:24;25593:2;25572:20;:24::i;:::-;-1:-1:-1;;;;;25572:38:7;;;25555:55;;25620:21;25672:9;-1:-1:-1;;;;;25644:37:7;:24;25665:2;25644:20;:24::i;:::-;-1:-1:-1;;;;;25644:37:7;;25620:61;;25691:17;25711;25725:2;25711:13;:17::i;:::-;25691:37;;25739:17;25771:189;25817:9;25844:7;25869:9;25896:16;25930;25771:28;:189::i;:::-;25739:221;;26085:126;26201:9;26085:98;26128:15;26140:2;26128:11;:15::i;:::-;26157:16;26085:29;:98::i;:::-;:115;:126;:115;:126;:::i;:::-;26346:12;;;;:37;;;-1:-1:-1;;;26346:37:7;;26377:4;26346:37;;;;;;26069:142;;-1:-1:-1;26328:15:7;;-1:-1:-1;;;;;26346:12:7;;;;:22;;:37;;;;;;;;;;;;;;;:12;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;26346:37:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26346:37:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26346:37:7;;-1:-1:-1;26397:23:7;;;26393:144;;;26452:26;:13;26470:7;26452:26;:17;:26;:::i;:::-;26436:42;;26393:144;;;26525:1;26509:17;;26393:144;26931:7;:20;;;;;26942:9;26931:20;:41;;;;;26956:16;26955:17;26931:41;26927:99;;;27006:9;26988:27;;26927:99;27107:84;27166:15;27107:41;27138:9;27107:41;:7;27119:13;27107:26;:11;:26;:::i;:::-;:30;:41;:30;:41;:::i;:84::-;27089:102;-1:-1:-1;;;;;;;;24892:2373:7;;;;;;;:::o;13589:155::-;13651:7;13677:60;13700:13;:34;:36;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13700:36:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13700:36:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13700:36:7;13677:18;;;;-1:-1:-1;;;13677:18:7;;;;;:22;:60::i;2606:326:60:-;2664:7;2761:1;2757;:5;2749:44;;;;;-1:-1:-1;;;2749:44:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:9;2819:1;2815;:5;;;;;;;2606:326;-1:-1:-1;;;;2606:326:60:o;1052:437:48:-;1130:5;1157;1163:1;1157:8;;;;;;;;;;;;;;;1151:15;:23;1147:94;;;-1:-1:-1;1197:1:48;1190:8;;1147:94;1260:5;1266:1;1260:8;;;;;;;;;;;;;;;1273:4;1254:23;1250:94;;;-1:-1:-1;1300:1:48;1293:8;;1250:94;1363:5;1369:1;1363:8;;;;;;;;;;;;;;;1376:4;1357:23;1353:94;;;-1:-1:-1;1403:1:48;1396:8;;1353:94;-1:-1:-1;1464:1:48;1052:437;;;:::o;8454:439::-;8527:7;8536;8575:2;8559:6;:13;:18;8555:72;;;-1:-1:-1;;;655:66:48;-1:-1:-1;8614:1:48;8593:23;;8555:72;8636:27;8666:36;8679:2;8699;8683:6;:13;:18;8666:6;:12;;:36;;;;;:::i;:::-;8636:66;;8713:22;8745:21;8810:27;8822:14;8810:11;:27::i;:::-;8776:61;;-1:-1:-1;8776:61:48;-1:-1:-1;;;;8454:439:48;;;:::o;19001:243:7:-;19171:19;;;;:51;;;-1:-1:-1;;;19171:51:7;;19215:4;19171:51;;;;;;19088:15;;-1:-1:-1;;;;;19171:19:7;;:27;;:51;;;;;;;;;;;;;;:19;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;19171:51:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19171:51:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;12092:320:7;12193:7;12216:17;12236:47;12252:13;:28;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12252:30:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12252:30:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12252:30:7;12236:11;;;;;:47;:15;:47;:::i;:::-;12216:67;;12315:9;12297:15;:27;12293:95;;;12347:30;:9;12361:15;12347:30;:13;:30;:::i;:::-;12340:37;;;;;12293:95;-1:-1:-1;12404:1:7;;12092:320;-1:-1:-1;;12092:320:7:o;28270:1072::-;28476:7;28679:28;28722:8;:22;;;;;28734:10;28722:22;:44;;;;;28749:17;28748:18;28722:44;28679:87;;28777:22;28814:8;:190;;;;28994:10;28814:190;:298;;;;29095:17;28814:298;28777:335;-1:-1:-1;29123:17:7;29154:70;;;;29191:22;;29154:70;29237:23;29233:76;;;29276:22;;29233:76;29326:9;28270:1072;-1:-1:-1;;;;;;;;28270:1072:7:o;27557:232::-;27683:7;27706:17;27702:56;;;-1:-1:-1;27746:1:7;27739:8;;27702:56;-1:-1:-1;27774:8:7;;27557:232;-1:-1:-1;27557:232:7:o;1693:458:60:-;1751:7;1991:6;1987:45;;-1:-1:-1;2020:1:60;2013:8;;1987:45;2054:5;;;2058:1;2054;:5;:1;2077:5;;;;;:10;2069:56;;;;-1:-1:-1;;;2069:56:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;960:18387:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;960:18387:5;;;-1:-1:-1;960:18387:5;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity 0.5.17;\n\nimport {BTCUtils} from \"@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol\";\nimport {BytesLib} from \"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\";\nimport {ValidateSPV} from \"@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol\";\nimport {\n    CheckBitcoinSigs\n} from \"@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol\";\nimport {\n    IERC721\n} from \"openzeppelin-solidity/contracts/token/ERC721/IERC721.sol\";\nimport {SafeMath} from \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport {\n    IBondedECDSAKeep\n} from \"@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol\";\nimport {DepositUtils} from \"./DepositUtils.sol\";\nimport {DepositStates} from \"./DepositStates.sol\";\nimport {OutsourceDepositLogging} from \"./OutsourceDepositLogging.sol\";\nimport {TBTCConstants} from \"../system/TBTCConstants.sol\";\nimport {TBTCToken} from \"../system/TBTCToken.sol\";\nimport {DepositLiquidation} from \"./DepositLiquidation.sol\";\n\nlibrary DepositRedemption {\n    using SafeMath for uint256;\n    using CheckBitcoinSigs for bytes;\n    using BytesLib for bytes;\n    using BTCUtils for bytes;\n    using ValidateSPV for bytes;\n    using ValidateSPV for bytes32;\n\n    using DepositUtils for DepositUtils.Deposit;\n    using DepositStates for DepositUtils.Deposit;\n    using DepositLiquidation for DepositUtils.Deposit;\n    using OutsourceDepositLogging for DepositUtils.Deposit;\n\n    /// @notice     Pushes signer fee to the Keep group by transferring it to the Keep address.\n    /// @dev        Approves the keep contract, then expects it to call transferFrom.\n    function distributeSignerFee(DepositUtils.Deposit storage _d) internal {\n        IBondedECDSAKeep _keep = IBondedECDSAKeep(_d.keepAddress);\n\n        _d.tbtcToken.approve(_d.keepAddress, _d.signerFeeTbtc());\n        _keep.distributeERC20Reward(address(_d.tbtcToken), _d.signerFeeTbtc());\n    }\n\n    /// @notice Approves digest for signing by a keep.\n    /// @dev Calls given keep to sign the digest. Records a current timestamp\n    /// for given digest.\n    /// @param _digest Digest to approve.\n    function approveDigest(DepositUtils.Deposit storage _d, bytes32 _digest)\n        internal\n    {\n        IBondedECDSAKeep(_d.keepAddress).sign(_digest);\n\n        _d.approvedDigests[_digest] = block.timestamp;\n    }\n\n    /// @notice Handles TBTC requirements for redemption.\n    /// @dev Burns or transfers depending on term and supply-peg impact.\n    ///      Once these transfers complete, the deposit balance should be\n    ///      sufficient to pay out signer fees once the redemption transaction\n    ///      is proven on the Bitcoin side.\n    function performRedemptionTbtcTransfers(DepositUtils.Deposit storage _d)\n        internal\n    {\n        address tdtHolder = _d.depositOwner();\n        address frtHolder = _d.feeRebateTokenHolder();\n        address vendingMachineAddress = _d.vendingMachineAddress;\n\n        (\n            uint256 tbtcOwedToDeposit,\n            uint256 tbtcOwedToTdtHolder,\n            uint256 tbtcOwedToFrtHolder\n        ) = _d.calculateRedemptionTbtcAmounts(_d.redeemerAddress, false);\n\n        if (tbtcOwedToDeposit > 0) {\n            _d.tbtcToken.transferFrom(\n                msg.sender,\n                address(this),\n                tbtcOwedToDeposit\n            );\n        }\n        if (tbtcOwedToTdtHolder > 0) {\n            if (tdtHolder == vendingMachineAddress) {\n                _d.tbtcToken.burn(tbtcOwedToTdtHolder);\n            } else {\n                _d.tbtcToken.transfer(tdtHolder, tbtcOwedToTdtHolder);\n            }\n        }\n        if (tbtcOwedToFrtHolder > 0) {\n            _d.tbtcToken.transfer(frtHolder, tbtcOwedToFrtHolder);\n        }\n    }\n\n    function _requestRedemption(\n        DepositUtils.Deposit storage _d,\n        bytes8 _outputValueBytes,\n        bytes memory _redeemerOutputScript,\n        address payable _redeemer\n    ) internal {\n        require(\n            _d.inRedeemableState(),\n            \"Redemption only available from Active or Courtesy state\"\n        );\n        bytes memory _output =\n            abi.encodePacked(_outputValueBytes, _redeemerOutputScript);\n        require(\n            _output.extractHash().length > 0,\n            \"Output script must be a standard type\"\n        );\n\n        // set redeemerAddress early to enable direct access by other functions\n        _d.redeemerAddress = _redeemer;\n\n        performRedemptionTbtcTransfers(_d);\n\n        // Convert the 8-byte LE ints to uint256\n        uint256 _outputValue =\n            abi\n                .encodePacked(_outputValueBytes)\n                .reverseEndianness()\n                .bytesToUint();\n        uint256 _requestedFee = _d.utxoValue().sub(_outputValue);\n\n        require(\n            _requestedFee >= TBTCConstants.getMinimumRedemptionFee(),\n            \"Fee is too low\"\n        );\n        require(\n            _requestedFee < _d.utxoValue() / 2,\n            \"Initial fee cannot exceed half of the deposit's value\"\n        );\n\n        // Calculate the sighash\n        bytes32 _sighash =\n            CheckBitcoinSigs.wpkhSpendSighash(\n                _d.utxoOutpoint,\n                _d.signerPKH(),\n                _d.utxoValueBytes,\n                _outputValueBytes,\n                _redeemerOutputScript\n            );\n\n        // write all request details\n        _d.redeemerOutputScript = _redeemerOutputScript;\n        _d.initialRedemptionFee = _requestedFee;\n        _d.latestRedemptionFee = _requestedFee;\n        _d.withdrawalRequestTime = block.timestamp;\n        _d.lastRequestedDigest = _sighash;\n\n        approveDigest(_d, _sighash);\n\n        _d.setAwaitingWithdrawalSignature();\n        _d.logRedemptionRequested(\n            _redeemer,\n            _sighash,\n            _d.utxoValue(),\n            _redeemerOutputScript,\n            _requestedFee,\n            _d.utxoOutpoint\n        );\n    }\n\n    /// @notice                     Anyone can request redemption as long as they can.\n    ///                             approve the TDT transfer to the final recipient.\n    /// @dev                        The redeemer specifies details about the Bitcoin redemption tx and pays for the redemption\n    ///                             on behalf of _finalRecipient.\n    /// @param  _d                  Deposit storage pointer.\n    /// @param  _outputValueBytes   The 8-byte LE output size.\n    /// @param  _redeemerOutputScript The redeemer's length-prefixed output script.\n    /// @param  _finalRecipient     The address to receive the TDT and later be recorded as deposit redeemer.\n    function transferAndRequestRedemption(\n        DepositUtils.Deposit storage _d,\n        bytes8 _outputValueBytes,\n        bytes memory _redeemerOutputScript,\n        address payable _finalRecipient\n    ) public {\n        // not external to allow bytes memory parameters\n        _d.tbtcDepositToken.transferFrom(\n            msg.sender,\n            _finalRecipient,\n            uint256(address(this))\n        );\n\n        _requestRedemption(\n            _d,\n            _outputValueBytes,\n            _redeemerOutputScript,\n            _finalRecipient\n        );\n    }\n\n    /// @notice                     Only TDT holder can request redemption,\n    ///                             unless Deposit is expired or in COURTESY_CALL.\n    /// @dev                        The redeemer specifies details about the Bitcoin redemption transaction.\n    /// @param  _d                  Deposit storage pointer.\n    /// @param  _outputValueBytes   The 8-byte LE output size.\n    /// @param  _redeemerOutputScript The redeemer's length-prefixed output script.\n    function requestRedemption(\n        DepositUtils.Deposit storage _d,\n        bytes8 _outputValueBytes,\n        bytes memory _redeemerOutputScript\n    ) public {\n        // not external to allow bytes memory parameters\n        _requestRedemption(\n            _d,\n            _outputValueBytes,\n            _redeemerOutputScript,\n            msg.sender\n        );\n    }\n\n    /// @notice     Anyone may provide a withdrawal signature if it was requested.\n    /// @dev        The signers will be penalized if this (or provideRedemptionProof) is not called.\n    /// @param  _d  Deposit storage pointer.\n    /// @param  _v  Signature recovery value.\n    /// @param  _r  Signature R value.\n    /// @param  _s  Signature S value. Should be in the low half of secp256k1 curve's order.\n    function provideRedemptionSignature(\n        DepositUtils.Deposit storage _d,\n        uint8 _v,\n        bytes32 _r,\n        bytes32 _s\n    ) external {\n        require(\n            _d.inAwaitingWithdrawalSignature(),\n            \"Not currently awaiting a signature\"\n        );\n\n        // If we're outside of the signature window, we COULD punish signers here\n        // Instead, we consider this a no-harm-no-foul situation.\n        // The signers have not stolen funds. Most likely they've just inconvenienced someone\n\n        // Validate `s` value for a malleability concern described in EIP-2.\n        // Only signatures with `s` value in the lower half of the secp256k1\n        // curve's order are considered valid.\n        require(\n            uint256(_s) <=\n                0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n            \"Malleable signature - s should be in the low half of secp256k1 curve's order\"\n        );\n\n        // The signature must be valid on the pubkey\n        require(\n            _d.signerPubkey().checkSig(_d.lastRequestedDigest, _v, _r, _s),\n            \"Invalid signature\"\n        );\n\n        // A signature has been provided, now we wait for fee bump or redemption\n        _d.setAwaitingWithdrawalProof();\n        _d.logGotRedemptionSignature(_d.lastRequestedDigest, _r, _s);\n    }\n\n    /// @notice                             Anyone may notify the contract that a fee bump is needed.\n    /// @dev                                This sends us back to AWAITING_WITHDRAWAL_SIGNATURE.\n    /// @param  _d                          Deposit storage pointer.\n    /// @param  _previousOutputValueBytes   The previous output's value.\n    /// @param  _newOutputValueBytes        The new output's value.\n    function increaseRedemptionFee(\n        DepositUtils.Deposit storage _d,\n        bytes8 _previousOutputValueBytes,\n        bytes8 _newOutputValueBytes\n    ) public {\n        require(\n            _d.inAwaitingWithdrawalProof(),\n            \"Fee increase only available after signature provided\"\n        );\n        require(\n            block.timestamp >=\n                _d.withdrawalRequestTime.add(\n                    TBTCConstants.getIncreaseFeeTimer()\n                ),\n            \"Fee increase not yet permitted\"\n        );\n\n        uint256 _newOutputValue =\n            checkRelationshipToPrevious(\n                _d,\n                _previousOutputValueBytes,\n                _newOutputValueBytes\n            );\n\n        // If the fee bump shrinks the UTXO value below the minimum allowed\n        // value, clamp it to that minimum. Further fee bumps will be disallowed\n        // by checkRelationshipToPrevious.\n        if (_newOutputValue < TBTCConstants.getMinimumUtxoValue()) {\n            _newOutputValue = TBTCConstants.getMinimumUtxoValue();\n        }\n\n        _d.latestRedemptionFee = _d.utxoValue().sub(_newOutputValue);\n\n        // Calculate the next sighash\n        bytes32 _sighash =\n            CheckBitcoinSigs.wpkhSpendSighash(\n                _d.utxoOutpoint,\n                _d.signerPKH(),\n                _d.utxoValueBytes,\n                _newOutputValueBytes,\n                _d.redeemerOutputScript\n            );\n\n        // Ratchet the signature and redemption proof timeouts\n        _d.withdrawalRequestTime = block.timestamp;\n        _d.lastRequestedDigest = _sighash;\n\n        approveDigest(_d, _sighash);\n\n        // Go back to waiting for a signature\n        _d.setAwaitingWithdrawalSignature();\n        _d.logRedemptionRequested(\n            msg.sender,\n            _sighash,\n            _d.utxoValue(),\n            _d.redeemerOutputScript,\n            _d.latestRedemptionFee,\n            _d.utxoOutpoint\n        );\n    }\n\n    function checkRelationshipToPrevious(\n        DepositUtils.Deposit storage _d,\n        bytes8 _previousOutputValueBytes,\n        bytes8 _newOutputValueBytes\n    ) public view returns (uint256 _newOutputValue) {\n        // Check that we're incrementing the fee by exactly the redeemer's initial fee\n        uint256 _previousOutputValue =\n            DepositUtils.bytes8LEToUint(_previousOutputValueBytes);\n        _newOutputValue = DepositUtils.bytes8LEToUint(_newOutputValueBytes);\n        require(\n            _previousOutputValue.sub(_newOutputValue) ==\n                _d.initialRedemptionFee,\n            \"Not an allowed fee step\"\n        );\n\n        // Calculate the previous one so we can check that it really is the previous one\n        bytes32 _previousSighash =\n            CheckBitcoinSigs.wpkhSpendSighash(\n                _d.utxoOutpoint,\n                _d.signerPKH(),\n                _d.utxoValueBytes,\n                _previousOutputValueBytes,\n                _d.redeemerOutputScript\n            );\n        require(\n            _d.wasDigestApprovedForSigning(_previousSighash) ==\n                _d.withdrawalRequestTime,\n            \"Provided previous value does not yield previous sighash\"\n        );\n    }\n\n    /// @notice                 Anyone may provide a withdrawal proof to prove redemption.\n    /// @dev                    The signers will be penalized if this is not called.\n    /// @param  _d              Deposit storage pointer.\n    /// @param  _txVersion      Transaction version number (4-byte LE).\n    /// @param  _txInputVector  All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\n    /// @param  _txOutputVector All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\n    /// @param  _txLocktime     Final 4 bytes of the transaction.\n    /// @param  _merkleProof    The merkle proof of inclusion of the tx in the bitcoin block.\n    /// @param  _txIndexInBlock The index of the tx in the Bitcoin block (0-indexed).\n    /// @param  _bitcoinHeaders An array of tightly-packed bitcoin headers.\n    function provideRedemptionProof(\n        DepositUtils.Deposit storage _d,\n        bytes4 _txVersion,\n        bytes memory _txInputVector,\n        bytes memory _txOutputVector,\n        bytes4 _txLocktime,\n        bytes memory _merkleProof,\n        uint256 _txIndexInBlock,\n        bytes memory _bitcoinHeaders\n    ) public {\n        // not external to allow bytes memory parameters\n        bytes32 _txid;\n        uint256 _fundingOutputValue;\n\n        require(\n            _d.inRedemption(),\n            \"Redemption proof only allowed from redemption flow\"\n        );\n\n        _fundingOutputValue = redemptionTransactionChecks(\n            _d,\n            _txInputVector,\n            _txOutputVector\n        );\n\n        _txid = abi\n            .encodePacked(\n            _txVersion,\n            _txInputVector,\n            _txOutputVector,\n            _txLocktime\n        )\n            .hash256();\n        _d.checkProofFromTxId(\n            _txid,\n            _merkleProof,\n            _txIndexInBlock,\n            _bitcoinHeaders\n        );\n\n        require(\n            (_d.utxoValue().sub(_fundingOutputValue)) <= _d.latestRedemptionFee,\n            \"Incorrect fee amount\"\n        );\n\n        // Transfer TBTC to signers and close the keep.\n        distributeSignerFee(_d);\n        _d.closeKeep();\n\n        _d.distributeFeeRebate();\n\n        // We're done yey!\n        _d.setRedeemed();\n        _d.redemptionTeardown();\n        _d.logRedeemed(_txid);\n    }\n\n    /// @notice                 Check the redemption transaction input and output vector to ensure the transaction spends\n    ///                         the correct UTXO and sends value to the appropriate public key hash.\n    /// @dev                    We only look at the first input and first output. Revert if we find the wrong UTXO or value recipient.\n    ///                         It's safe to look at only the first input/output as anything that breaks this can be considered fraud\n    ///                         and can be caught by ECDSAFraudProof.\n    /// @param  _d              Deposit storage pointer.\n    /// @param _txInputVector   All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\n    /// @param _txOutputVector  All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\n    /// @return                 The value sent to the redeemer's public key hash.\n    function redemptionTransactionChecks(\n        DepositUtils.Deposit storage _d,\n        bytes memory _txInputVector,\n        bytes memory _txOutputVector\n    ) public view returns (uint256) {\n        require(_txInputVector.validateVin(), \"invalid input vector provided\");\n        require(\n            _txOutputVector.validateVout(),\n            \"invalid output vector provided\"\n        );\n        bytes memory _input =\n            _txInputVector.slice(1, _txInputVector.length - 1);\n\n        require(\n            keccak256(_input.extractOutpoint()) == keccak256(_d.utxoOutpoint),\n            \"Tx spends the wrong UTXO\"\n        );\n\n        bytes memory _output =\n            _txOutputVector.slice(1, _txOutputVector.length - 1);\n        bytes memory _expectedOutputScript = _d.redeemerOutputScript;\n        require(\n            _output.length - 8 >= _d.redeemerOutputScript.length,\n            \"Output script is too short to extract the expected script\"\n        );\n        require(\n            keccak256(_output.slice(8, _expectedOutputScript.length)) ==\n                keccak256(_expectedOutputScript),\n            \"Tx sends value to wrong output script\"\n        );\n        return (uint256(_output.extractValue()));\n    }\n\n    /// @notice     Anyone may notify the contract that the signers have failed to produce a signature.\n    /// @dev        This is considered fraud, and is punished.\n    /// @param  _d  Deposit storage pointer.\n    function notifyRedemptionSignatureTimedOut(DepositUtils.Deposit storage _d)\n        external\n    {\n        require(\n            _d.inAwaitingWithdrawalSignature(),\n            \"Not currently awaiting a signature\"\n        );\n        require(\n            block.timestamp >\n                _d.withdrawalRequestTime.add(\n                    TBTCConstants.getSignatureTimeout()\n                ),\n            \"Signature timer has not elapsed\"\n        );\n        _d.startLiquidation(false); // not fraud, just failure\n    }\n\n    /// @notice     Anyone may notify the contract that the signers have failed to produce a redemption proof.\n    /// @dev        This is considered fraud, and is punished.\n    /// @param  _d  Deposit storage pointer.\n    function notifyRedemptionProofTimedOut(DepositUtils.Deposit storage _d)\n        external\n    {\n        require(\n            _d.inAwaitingWithdrawalProof(),\n            \"Not currently awaiting a redemption proof\"\n        );\n        require(\n            block.timestamp >\n                _d.withdrawalRequestTime.add(\n                    TBTCConstants.getRedemptionProofTimeout()\n                ),\n            \"Proof timer has not elapsed\"\n        );\n        _d.startLiquidation(false); // not fraud, just failure\n    }\n}\n",
  "sourcePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositRedemption.sol",
  "ast": {
    "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositRedemption.sol",
    "exportedSymbols": {
      "DepositRedemption": [
        3269
      ]
    },
    "id": 3270,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2332,
        "literals": [
          "solidity",
          "0.5",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:5"
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
        "file": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
        "id": 2334,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 13217,
        "src": "25:74:5",
        "symbolAliases": [
          {
            "foreign": 2333,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
        "file": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
        "id": 2336,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 13433,
        "src": "100:74:5",
        "symbolAliases": [
          {
            "foreign": 2335,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
        "file": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
        "id": 2338,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 14208,
        "src": "175:80:5",
        "symbolAliases": [
          {
            "foreign": 2337,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol",
        "file": "@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol",
        "id": 2340,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 13825,
        "src": "256:96:5",
        "symbolAliases": [
          {
            "foreign": 2339,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
        "id": 2342,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 18288,
        "src": "353:87:5",
        "symbolAliases": [
          {
            "foreign": 2341,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 2344,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 16856,
        "src": "441:75:5",
        "symbolAliases": [
          {
            "foreign": 2343,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol",
        "file": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol",
        "id": 2346,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 11429,
        "src": "517:99:5",
        "symbolAliases": [
          {
            "foreign": 2345,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol",
        "file": "./DepositUtils.sol",
        "id": 2348,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 5104,
        "src": "617:48:5",
        "symbolAliases": [
          {
            "foreign": 2347,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositStates.sol",
        "file": "./DepositStates.sol",
        "id": 2350,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 3779,
        "src": "666:50:5",
        "symbolAliases": [
          {
            "foreign": 2349,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/OutsourceDepositLogging.sol",
        "file": "./OutsourceDepositLogging.sol",
        "id": 2352,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 5419,
        "src": "717:70:5",
        "symbolAliases": [
          {
            "foreign": 2351,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCConstants.sol",
        "file": "../system/TBTCConstants.sol",
        "id": 2354,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 6758,
        "src": "788:58:5",
        "symbolAliases": [
          {
            "foreign": 2353,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
        "file": "../system/TBTCToken.sol",
        "id": 2356,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 8562,
        "src": "847:50:5",
        "symbolAliases": [
          {
            "foreign": 2355,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositLiquidation.sol",
        "file": "./DepositLiquidation.sol",
        "id": 2358,
        "nodeType": "ImportDirective",
        "scope": 3270,
        "sourceUnit": 2331,
        "src": "898:60:5",
        "symbolAliases": [
          {
            "foreign": 2357,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 3269,
        "linearizedBaseContracts": [
          3269
        ],
        "name": "DepositRedemption",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 2361,
            "libraryName": {
              "contractScope": null,
              "id": 2359,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16855,
              "src": "998:8:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$16855",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "992:27:5",
            "typeName": {
              "id": 2360,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1011:7:5",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 2364,
            "libraryName": {
              "contractScope": null,
              "id": 2362,
              "name": "CheckBitcoinSigs",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13824,
              "src": "1030:16:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CheckBitcoinSigs_$13824",
                "typeString": "library CheckBitcoinSigs"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1024:33:5",
            "typeName": {
              "id": 2363,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "1051:5:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 2367,
            "libraryName": {
              "contractScope": null,
              "id": 2365,
              "name": "BytesLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13432,
              "src": "1068:8:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesLib_$13432",
                "typeString": "library BytesLib"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1062:25:5",
            "typeName": {
              "id": 2366,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "1081:5:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 2370,
            "libraryName": {
              "contractScope": null,
              "id": 2368,
              "name": "BTCUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13216,
              "src": "1098:8:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BTCUtils_$13216",
                "typeString": "library BTCUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1092:25:5",
            "typeName": {
              "id": 2369,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "1111:5:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 2373,
            "libraryName": {
              "contractScope": null,
              "id": 2371,
              "name": "ValidateSPV",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14207,
              "src": "1128:11:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ValidateSPV_$14207",
                "typeString": "library ValidateSPV"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1122:28:5",
            "typeName": {
              "id": 2372,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "1144:5:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 2376,
            "libraryName": {
              "contractScope": null,
              "id": 2374,
              "name": "ValidateSPV",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14207,
              "src": "1161:11:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ValidateSPV_$14207",
                "typeString": "library ValidateSPV"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1155:30:5",
            "typeName": {
              "id": 2375,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1177:7:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "id": 2379,
            "libraryName": {
              "contractScope": null,
              "id": 2377,
              "name": "DepositUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5103,
              "src": "1197:12:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositUtils_$5103",
                "typeString": "library DepositUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1191:44:5",
            "typeName": {
              "contractScope": null,
              "id": 2378,
              "name": "DepositUtils.Deposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3893,
              "src": "1214:20:5",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                "typeString": "struct DepositUtils.Deposit"
              }
            }
          },
          {
            "id": 2382,
            "libraryName": {
              "contractScope": null,
              "id": 2380,
              "name": "DepositStates",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3778,
              "src": "1246:13:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositStates_$3778",
                "typeString": "library DepositStates"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1240:45:5",
            "typeName": {
              "contractScope": null,
              "id": 2381,
              "name": "DepositUtils.Deposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3893,
              "src": "1264:20:5",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                "typeString": "struct DepositUtils.Deposit"
              }
            }
          },
          {
            "id": 2385,
            "libraryName": {
              "contractScope": null,
              "id": 2383,
              "name": "DepositLiquidation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2330,
              "src": "1296:18:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositLiquidation_$2330",
                "typeString": "library DepositLiquidation"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1290:50:5",
            "typeName": {
              "contractScope": null,
              "id": 2384,
              "name": "DepositUtils.Deposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3893,
              "src": "1319:20:5",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                "typeString": "struct DepositUtils.Deposit"
              }
            }
          },
          {
            "id": 2388,
            "libraryName": {
              "contractScope": null,
              "id": 2386,
              "name": "OutsourceDepositLogging",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5418,
              "src": "1351:23:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OutsourceDepositLogging_$5418",
                "typeString": "library OutsourceDepositLogging"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1345:55:5",
            "typeName": {
              "contractScope": null,
              "id": 2387,
              "name": "DepositUtils.Deposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3893,
              "src": "1379:20:5",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                "typeString": "struct DepositUtils.Deposit"
              }
            }
          },
          {
            "body": {
              "id": 2424,
              "nodeType": "Block",
              "src": "1659:221:5",
              "statements": [
                {
                  "assignments": [
                    2394
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2394,
                      "name": "_keep",
                      "nodeType": "VariableDeclaration",
                      "scope": 2424,
                      "src": "1669:22:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                        "typeString": "contract IBondedECDSAKeep"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2393,
                        "name": "IBondedECDSAKeep",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11428,
                        "src": "1669:16:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                          "typeString": "contract IBondedECDSAKeep"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2399,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2396,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2390,
                          "src": "1711:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2397,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "keepAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3858,
                        "src": "1711:14:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2395,
                      "name": "IBondedECDSAKeep",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11428,
                      "src": "1694:16:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IBondedECDSAKeep_$11428_$",
                        "typeString": "type(contract IBondedECDSAKeep)"
                      }
                    },
                    "id": 2398,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1694:32:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                      "typeString": "contract IBondedECDSAKeep"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1669:57:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2405,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2390,
                          "src": "1758:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2406,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "keepAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3858,
                        "src": "1758:14:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2407,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2390,
                            "src": "1774:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2408,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "signerFeeTbtc",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4372,
                          "src": "1774:16:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 2409,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1774:18:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2400,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2390,
                          "src": "1737:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2403,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tbtcToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3830,
                        "src": "1737:12:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TBTCToken_$8561",
                          "typeString": "contract TBTCToken"
                        }
                      },
                      "id": 2404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17061,
                      "src": "1737:20:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 2410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1737:56:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2411,
                  "nodeType": "ExpressionStatement",
                  "src": "1737:56:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2416,
                              "name": "_d",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2390,
                              "src": "1839:2:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                "typeString": "struct DepositUtils.Deposit storage pointer"
                              }
                            },
                            "id": 2417,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "tbtcToken",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3830,
                            "src": "1839:12:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TBTCToken_$8561",
                              "typeString": "contract TBTCToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TBTCToken_$8561",
                              "typeString": "contract TBTCToken"
                            }
                          ],
                          "id": 2415,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1831:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2418,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1831:21:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2419,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2390,
                            "src": "1854:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2420,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "signerFeeTbtc",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4372,
                          "src": "1854:16:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 2421,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1854:18:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2412,
                        "name": "_keep",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2394,
                        "src": "1803:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                          "typeString": "contract IBondedECDSAKeep"
                        }
                      },
                      "id": 2414,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "distributeERC20Reward",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11403,
                      "src": "1803:27:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 2422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1803:70:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2423,
                  "nodeType": "ExpressionStatement",
                  "src": "1803:70:5"
                }
              ]
            },
            "documentation": "@notice     Pushes signer fee to the Keep group by transferring it to the Keep address.\n @dev        Approves the keep contract, then expects it to call transferFrom.",
            "id": 2425,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "distributeSignerFee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2391,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2390,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 2425,
                  "src": "1617:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2389,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "1617:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1616:33:5"
            },
            "returnParameters": {
              "id": 2392,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1659:0:5"
            },
            "scope": 3269,
            "src": "1588:292:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2449,
              "nodeType": "Block",
              "src": "2181:119:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2437,
                        "name": "_digest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2429,
                        "src": "2229:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2433,
                              "name": "_d",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2427,
                              "src": "2208:2:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                "typeString": "struct DepositUtils.Deposit storage pointer"
                              }
                            },
                            "id": 2434,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "keepAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3858,
                            "src": "2208:14:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 2432,
                          "name": "IBondedECDSAKeep",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11428,
                          "src": "2191:16:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBondedECDSAKeep_$11428_$",
                            "typeString": "type(contract IBondedECDSAKeep)"
                          }
                        },
                        "id": 2435,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2191:32:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                          "typeString": "contract IBondedECDSAKeep"
                        }
                      },
                      "id": 2436,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sign",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11393,
                      "src": "2191:37:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32) external"
                      }
                    },
                    "id": 2438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2191:46:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2439,
                  "nodeType": "ExpressionStatement",
                  "src": "2191:46:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2440,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2427,
                          "src": "2248:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2443,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "approvedDigests",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3892,
                        "src": "2248:18:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        }
                      },
                      "id": 2444,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2442,
                        "name": "_digest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2429,
                        "src": "2267:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2248:27:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2445,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18350,
                        "src": "2278:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 2446,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2278:15:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2248:45:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2448,
                  "nodeType": "ExpressionStatement",
                  "src": "2248:45:5"
                }
              ]
            },
            "documentation": "@notice Approves digest for signing by a keep.\n @dev Calls given keep to sign the digest. Records a current timestamp\n for given digest.\n @param _digest Digest to approve.",
            "id": 2450,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approveDigest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2427,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 2450,
                  "src": "2110:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2426,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "2110:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2429,
                  "name": "_digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 2450,
                  "src": "2143:15:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2428,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2143:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2109:50:5"
            },
            "returnParameters": {
              "id": 2431,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2181:0:5"
            },
            "scope": 3269,
            "src": "2087:213:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2545,
              "nodeType": "Block",
              "src": "2728:956:5",
              "statements": [
                {
                  "assignments": [
                    2456
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2456,
                      "name": "tdtHolder",
                      "nodeType": "VariableDeclaration",
                      "scope": 2545,
                      "src": "2738:17:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2455,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2738:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2460,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2457,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2452,
                        "src": "2758:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2458,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "depositOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4604,
                      "src": "2758:15:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_address_payable_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)"
                      }
                    },
                    "id": 2459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2758:17:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2738:37:5"
                },
                {
                  "assignments": [
                    2462
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2462,
                      "name": "frtHolder",
                      "nodeType": "VariableDeclaration",
                      "scope": 2545,
                      "src": "2785:17:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2461,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2785:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2466,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2463,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2452,
                        "src": "2805:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2464,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "feeRebateTokenHolder",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4582,
                      "src": "2805:23:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_address_payable_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)"
                      }
                    },
                    "id": 2465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2805:25:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2785:45:5"
                },
                {
                  "assignments": [
                    2468
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2468,
                      "name": "vendingMachineAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 2545,
                      "src": "2840:29:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2467,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2840:7:5",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2471,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2469,
                      "name": "_d",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2452,
                      "src": "2872:2:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                        "typeString": "struct DepositUtils.Deposit storage pointer"
                      }
                    },
                    "id": 2470,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "vendingMachineAddress",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3836,
                    "src": "2872:24:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2840:56:5"
                },
                {
                  "assignments": [
                    2473,
                    2475,
                    2477
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2473,
                      "name": "tbtcOwedToDeposit",
                      "nodeType": "VariableDeclaration",
                      "scope": 2545,
                      "src": "2921:25:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2472,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2921:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2475,
                      "name": "tbtcOwedToTdtHolder",
                      "nodeType": "VariableDeclaration",
                      "scope": 2545,
                      "src": "2960:27:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2474,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2960:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2477,
                      "name": "tbtcOwedToFrtHolder",
                      "nodeType": "VariableDeclaration",
                      "scope": 2545,
                      "src": "3001:27:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2476,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3001:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2484,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2480,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2452,
                          "src": "3075:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2481,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemerAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3868,
                        "src": "3075:18:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 2482,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3095:5:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2478,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2452,
                        "src": "3041:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2479,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "calculateRedemptionTbtcAmounts",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5032,
                      "src": "3041:33:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_address_$_t_bool_$returns$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,address,bool) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 2483,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3041:60:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2907:194:5"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2485,
                      "name": "tbtcOwedToDeposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2473,
                      "src": "3116:17:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3136:1:5",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3116:21:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2502,
                  "nodeType": "IfStatement",
                  "src": "3112:185:5",
                  "trueBody": {
                    "id": 2501,
                    "nodeType": "Block",
                    "src": "3139:158:5",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2493,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18360,
                                "src": "3196:3:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2494,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3196:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2496,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18442,
                                  "src": "3232:4:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_DepositRedemption_$3269",
                                    "typeString": "library DepositRedemption"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_DepositRedemption_$3269",
                                    "typeString": "library DepositRedemption"
                                  }
                                ],
                                "id": 2495,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3224:7:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 2497,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3224:13:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2498,
                              "name": "tbtcOwedToDeposit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2473,
                              "src": "3255:17:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2488,
                                "name": "_d",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2452,
                                "src": "3153:2:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              },
                              "id": 2491,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tbtcToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3830,
                              "src": "3153:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_TBTCToken_$8561",
                                "typeString": "contract TBTCToken"
                              }
                            },
                            "id": 2492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 17096,
                            "src": "3153:25:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 2499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3153:133:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2500,
                        "nodeType": "ExpressionStatement",
                        "src": "3153:133:5"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2503,
                      "name": "tbtcOwedToTdtHolder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2475,
                      "src": "3310:19:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2504,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3332:1:5",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3310:23:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2530,
                  "nodeType": "IfStatement",
                  "src": "3306:256:5",
                  "trueBody": {
                    "id": 2529,
                    "nodeType": "Block",
                    "src": "3335:227:5",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2506,
                            "name": "tdtHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2456,
                            "src": "3353:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2507,
                            "name": "vendingMachineAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2468,
                            "src": "3366:21:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3353:34:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2527,
                          "nodeType": "Block",
                          "src": "3466:86:5",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2523,
                                    "name": "tdtHolder",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2456,
                                    "src": "3506:9:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2524,
                                    "name": "tbtcOwedToTdtHolder",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2475,
                                    "src": "3517:19:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2518,
                                      "name": "_d",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2452,
                                      "src": "3484:2:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                        "typeString": "struct DepositUtils.Deposit storage pointer"
                                      }
                                    },
                                    "id": 2521,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "tbtcToken",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3830,
                                    "src": "3484:12:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_TBTCToken_$8561",
                                      "typeString": "contract TBTCToken"
                                    }
                                  },
                                  "id": 2522,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 17026,
                                  "src": "3484:21:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,uint256) external returns (bool)"
                                  }
                                },
                                "id": 2525,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3484:53:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2526,
                              "nodeType": "ExpressionStatement",
                              "src": "3484:53:5"
                            }
                          ]
                        },
                        "id": 2528,
                        "nodeType": "IfStatement",
                        "src": "3349:203:5",
                        "trueBody": {
                          "id": 2517,
                          "nodeType": "Block",
                          "src": "3389:71:5",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2514,
                                    "name": "tbtcOwedToTdtHolder",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2475,
                                    "src": "3425:19:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2509,
                                      "name": "_d",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2452,
                                      "src": "3407:2:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                        "typeString": "struct DepositUtils.Deposit storage pointer"
                                      }
                                    },
                                    "id": 2512,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "tbtcToken",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3830,
                                    "src": "3407:12:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_TBTCToken_$8561",
                                      "typeString": "contract TBTCToken"
                                    }
                                  },
                                  "id": 2513,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "burn",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8524,
                                  "src": "3407:17:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) external"
                                  }
                                },
                                "id": 2515,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3407:38:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2516,
                              "nodeType": "ExpressionStatement",
                              "src": "3407:38:5"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2531,
                      "name": "tbtcOwedToFrtHolder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2477,
                      "src": "3575:19:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2532,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3597:1:5",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3575:23:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2544,
                  "nodeType": "IfStatement",
                  "src": "3571:107:5",
                  "trueBody": {
                    "id": 2543,
                    "nodeType": "Block",
                    "src": "3600:78:5",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2539,
                              "name": "frtHolder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2462,
                              "src": "3636:9:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2540,
                              "name": "tbtcOwedToFrtHolder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2477,
                              "src": "3647:19:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2534,
                                "name": "_d",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2452,
                                "src": "3614:2:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              },
                              "id": 2537,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tbtcToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3830,
                              "src": "3614:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_TBTCToken_$8561",
                                "typeString": "contract TBTCToken"
                              }
                            },
                            "id": 2538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 17026,
                            "src": "3614:21:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 2541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3614:53:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2542,
                        "nodeType": "ExpressionStatement",
                        "src": "3614:53:5"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Handles TBTC requirements for redemption.\n @dev Burns or transfers depending on term and supply-peg impact.\n      Once these transfers complete, the deposit balance should be\n      sufficient to pay out signer fees once the redemption transaction\n      is proven on the Bitcoin side.",
            "id": 2546,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "performRedemptionTbtcTransfers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2452,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 2546,
                  "src": "2674:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2451,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "2674:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2673:33:5"
            },
            "returnParameters": {
              "id": 2454,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2728:0:5"
            },
            "scope": 3269,
            "src": "2634:1050:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2702,
              "nodeType": "Block",
              "src": "3887:1965:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2558,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2548,
                            "src": "3918:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2559,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inRedeemableState",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3419,
                          "src": "3918:20:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                          }
                        },
                        "id": 2560,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3918:22:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526564656d7074696f6e206f6e6c7920617661696c61626c652066726f6d20416374697665206f7220436f757274657379207374617465",
                        "id": 2561,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3954:57:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fb7310ec49208474ec344af8f7bbd8f891ba2e4e3b54611db3223bff951b6065",
                          "typeString": "literal_string \"Redemption only available from Active or Courtesy state\""
                        },
                        "value": "Redemption only available from Active or Courtesy state"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fb7310ec49208474ec344af8f7bbd8f891ba2e4e3b54611db3223bff951b6065",
                          "typeString": "literal_string \"Redemption only available from Active or Courtesy state\""
                        }
                      ],
                      "id": 2557,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "3897:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3897:124:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2563,
                  "nodeType": "ExpressionStatement",
                  "src": "3897:124:5"
                },
                {
                  "assignments": [
                    2565
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2565,
                      "name": "_output",
                      "nodeType": "VariableDeclaration",
                      "scope": 2702,
                      "src": "4031:20:5",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2564,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4031:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2571,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2568,
                        "name": "_outputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2550,
                        "src": "4083:17:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2569,
                        "name": "_redeemerOutputScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2552,
                        "src": "4102:21:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2566,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18347,
                        "src": "4066:3:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 2567,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4066:16:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 2570,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4066:58:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4031:93:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2573,
                                "name": "_output",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2565,
                                "src": "4155:7:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2574,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "extractHash",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12682,
                              "src": "4155:19:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) pure returns (bytes memory)"
                              }
                            },
                            "id": 2575,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4155:21:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4155:28:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2577,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4186:1:5",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4155:32:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f757470757420736372697074206d7573742062652061207374616e646172642074797065",
                        "id": 2579,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4201:39:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1895c7d64bc4fc39f1ab63358f3c866164529d2cf46b23fa7d93fe7342d95ade",
                          "typeString": "literal_string \"Output script must be a standard type\""
                        },
                        "value": "Output script must be a standard type"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1895c7d64bc4fc39f1ab63358f3c866164529d2cf46b23fa7d93fe7342d95ade",
                          "typeString": "literal_string \"Output script must be a standard type\""
                        }
                      ],
                      "id": 2572,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "4134:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4134:116:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2581,
                  "nodeType": "ExpressionStatement",
                  "src": "4134:116:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2586,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2582,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2548,
                        "src": "4341:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2584,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "redeemerAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3868,
                      "src": "4341:18:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2585,
                      "name": "_redeemer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2554,
                      "src": "4362:9:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "4341:30:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 2587,
                  "nodeType": "ExpressionStatement",
                  "src": "4341:30:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2589,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2548,
                        "src": "4413:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      ],
                      "id": 2588,
                      "name": "performRedemptionTbtcTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2546,
                      "src": "4382:30:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 2590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4382:34:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2591,
                  "nodeType": "ExpressionStatement",
                  "src": "4382:34:5"
                },
                {
                  "assignments": [
                    2593
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2593,
                      "name": "_outputValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 2702,
                      "src": "4476:20:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2592,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4476:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2602,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2596,
                                "name": "_outputValueBytes",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2550,
                                "src": "4545:17:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2594,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18347,
                                "src": "4511:3:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 2595,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4511:33:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 2597,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4511:52:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reverseEndianness",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11643,
                          "src": "4511:87:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 2599,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4511:89:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 2600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "bytesToUint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11790,
                      "src": "4511:118:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) pure returns (uint256)"
                      }
                    },
                    "id": 2601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4511:120:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4476:155:5"
                },
                {
                  "assignments": [
                    2604
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2604,
                      "name": "_requestedFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 2702,
                      "src": "4641:21:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2603,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4641:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2611,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2609,
                        "name": "_outputValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2593,
                        "src": "4684:12:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2605,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2548,
                            "src": "4665:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2606,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "utxoValue",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4471,
                          "src": "4665:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 2607,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4665:14:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 2608,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16774,
                      "src": "4665:18:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2610,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4665:32:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4641:56:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2617,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2613,
                          "name": "_requestedFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2604,
                          "src": "4729:13:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2614,
                              "name": "TBTCConstants",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6757,
                              "src": "4746:13:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_TBTCConstants_$6757_$",
                                "typeString": "type(library TBTCConstants)"
                              }
                            },
                            "id": 2615,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getMinimumRedemptionFee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6716,
                            "src": "4746:37:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_pure$__$returns$_t_uint256_$",
                              "typeString": "function () pure returns (uint256)"
                            }
                          },
                          "id": 2616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4746:39:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4729:56:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "46656520697320746f6f206c6f77",
                        "id": 2618,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4799:16:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1a1caf81adfff16cf867c4b0a5b4b78e7cd04e7043ab702dbe34d63ba4f8282e",
                          "typeString": "literal_string \"Fee is too low\""
                        },
                        "value": "Fee is too low"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1a1caf81adfff16cf867c4b0a5b4b78e7cd04e7043ab702dbe34d63ba4f8282e",
                          "typeString": "literal_string \"Fee is too low\""
                        }
                      ],
                      "id": 2612,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "4708:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4708:117:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2620,
                  "nodeType": "ExpressionStatement",
                  "src": "4708:117:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2622,
                          "name": "_requestedFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2604,
                          "src": "4856:13:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2623,
                                "name": "_d",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2548,
                                "src": "4872:2:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              },
                              "id": 2624,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "utxoValue",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4471,
                              "src": "4872:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                                "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                              }
                            },
                            "id": 2625,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4872:14:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 2626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4889:1:5",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "4872:18:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4856:34:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e697469616c206665652063616e6e6f74206578636565642068616c66206f6620746865206465706f73697427732076616c7565",
                        "id": 2629,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4904:55:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9c0f3fb6ab2ce728d1b538b22ab625a223b2516e2a6717cd2f9b58c70df32913",
                          "typeString": "literal_string \"Initial fee cannot exceed half of the deposit's value\""
                        },
                        "value": "Initial fee cannot exceed half of the deposit's value"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9c0f3fb6ab2ce728d1b538b22ab625a223b2516e2a6717cd2f9b58c70df32913",
                          "typeString": "literal_string \"Initial fee cannot exceed half of the deposit's value\""
                        }
                      ],
                      "id": 2621,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "4835:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4835:134:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2631,
                  "nodeType": "ExpressionStatement",
                  "src": "4835:134:5"
                },
                {
                  "assignments": [
                    2633
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2633,
                      "name": "_sighash",
                      "nodeType": "VariableDeclaration",
                      "scope": 2702,
                      "src": "5013:16:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2632,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5013:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2646,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2636,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2548,
                          "src": "5095:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2637,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "utxoOutpoint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3884,
                        "src": "5095:15:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2638,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2548,
                            "src": "5128:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2639,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "signerPKH",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4458,
                          "src": "5128:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bytes20_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes20)"
                          }
                        },
                        "id": 2640,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5128:14:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2641,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2548,
                          "src": "5160:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2642,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "utxoValueBytes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3880,
                        "src": "5160:17:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2643,
                        "name": "_outputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2550,
                        "src": "5195:17:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2644,
                        "name": "_redeemerOutputScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2552,
                        "src": "5230:21:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        },
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2634,
                        "name": "CheckBitcoinSigs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13824,
                        "src": "5044:16:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_CheckBitcoinSigs_$13824_$",
                          "typeString": "type(library CheckBitcoinSigs)"
                        }
                      },
                      "id": 2635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "wpkhSpendSighash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13771,
                      "src": "5044:33:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes20_$_t_bytes8_$_t_bytes8_$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory,bytes20,bytes8,bytes8,bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5044:221:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5013:252:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2647,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2548,
                        "src": "5313:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2649,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "redeemerOutputScript",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3870,
                      "src": "5313:23:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage",
                        "typeString": "bytes storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2650,
                      "name": "_redeemerOutputScript",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2552,
                      "src": "5339:21:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "5313:47:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage",
                      "typeString": "bytes storage ref"
                    }
                  },
                  "id": 2652,
                  "nodeType": "ExpressionStatement",
                  "src": "5313:47:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2653,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2548,
                        "src": "5370:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2655,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "initialRedemptionFee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3872,
                      "src": "5370:23:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2656,
                      "name": "_requestedFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2604,
                      "src": "5396:13:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5370:39:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2658,
                  "nodeType": "ExpressionStatement",
                  "src": "5370:39:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2663,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2659,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2548,
                        "src": "5419:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2661,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "latestRedemptionFee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3874,
                      "src": "5419:22:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2662,
                      "name": "_requestedFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2604,
                      "src": "5444:13:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5419:38:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2664,
                  "nodeType": "ExpressionStatement",
                  "src": "5419:38:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2670,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2665,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2548,
                        "src": "5467:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2667,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "withdrawalRequestTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3876,
                      "src": "5467:24:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2668,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18350,
                        "src": "5494:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 2669,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5494:15:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5467:42:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2671,
                  "nodeType": "ExpressionStatement",
                  "src": "5467:42:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2672,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2548,
                        "src": "5519:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2674,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastRequestedDigest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3878,
                      "src": "5519:22:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2675,
                      "name": "_sighash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2633,
                      "src": "5544:8:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "5519:33:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 2677,
                  "nodeType": "ExpressionStatement",
                  "src": "5519:33:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2679,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2548,
                        "src": "5577:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2680,
                        "name": "_sighash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2633,
                        "src": "5581:8:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 2678,
                      "name": "approveDigest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2450,
                      "src": "5563:13:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes32_$returns$__$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes32)"
                      }
                    },
                    "id": 2681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5563:27:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2682,
                  "nodeType": "ExpressionStatement",
                  "src": "5563:27:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2683,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2548,
                        "src": "5601:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2685,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setAwaitingWithdrawalSignature",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3687,
                      "src": "5601:33:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 2686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5601:35:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2687,
                  "nodeType": "ExpressionStatement",
                  "src": "5601:35:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2691,
                        "name": "_redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2554,
                        "src": "5685:9:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2692,
                        "name": "_sighash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2633,
                        "src": "5708:8:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2693,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2548,
                            "src": "5730:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2694,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "utxoValue",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4471,
                          "src": "5730:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 2695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5730:14:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2696,
                        "name": "_redeemerOutputScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2552,
                        "src": "5758:21:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2697,
                        "name": "_requestedFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2604,
                        "src": "5793:13:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2698,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2548,
                          "src": "5820:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2699,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "utxoOutpoint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3884,
                        "src": "5820:15:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2688,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2548,
                        "src": "5646:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2690,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "logRedemptionRequested",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5170,
                      "src": "5646:25:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,address,bytes32,uint256,bytes memory,uint256,bytes memory)"
                      }
                    },
                    "id": 2700,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5646:199:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2701,
                  "nodeType": "ExpressionStatement",
                  "src": "5646:199:5"
                }
              ]
            },
            "documentation": null,
            "id": 2703,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_requestRedemption",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2548,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 2703,
                  "src": "3727:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2547,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "3727:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2550,
                  "name": "_outputValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 2703,
                  "src": "3768:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 2549,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3768:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2552,
                  "name": "_redeemerOutputScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 2703,
                  "src": "3802:34:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2551,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3802:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2554,
                  "name": "_redeemer",
                  "nodeType": "VariableDeclaration",
                  "scope": 2703,
                  "src": "3846:25:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2553,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3846:15:5",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3717:160:5"
            },
            "returnParameters": {
              "id": 2556,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3887:0:5"
            },
            "scope": 3269,
            "src": "3690:2162:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2736,
              "nodeType": "Block",
              "src": "6752:355:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2719,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18360,
                          "src": "6865:3:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6865:10:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2721,
                        "name": "_finalRecipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2711,
                        "src": "6889:15:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2724,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18442,
                                "src": "6934:4:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DepositRedemption_$3269",
                                  "typeString": "library DepositRedemption"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DepositRedemption_$3269",
                                  "typeString": "library DepositRedemption"
                                }
                              ],
                              "id": 2723,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6926:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 2725,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6926:13:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 2722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6918:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 2726,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6918:22:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2714,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2705,
                          "src": "6819:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2717,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tbtcDepositToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3832,
                        "src": "6819:19:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC721_$18287",
                          "typeString": "contract IERC721"
                        }
                      },
                      "id": 2718,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18245,
                      "src": "6819:32:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 2727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6819:131:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2728,
                  "nodeType": "ExpressionStatement",
                  "src": "6819:131:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2730,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2705,
                        "src": "6993:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2731,
                        "name": "_outputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2707,
                        "src": "7009:17:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2732,
                        "name": "_redeemerOutputScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2709,
                        "src": "7040:21:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2733,
                        "name": "_finalRecipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2711,
                        "src": "7075:15:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 2729,
                      "name": "_requestRedemption",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2703,
                      "src": "6961:18:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes8_$_t_bytes_memory_ptr_$_t_address_payable_$returns$__$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes memory,address payable)"
                      }
                    },
                    "id": 2734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6961:139:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2735,
                  "nodeType": "ExpressionStatement",
                  "src": "6961:139:5"
                }
              ]
            },
            "documentation": "@notice                     Anyone can request redemption as long as they can.\n                             approve the TDT transfer to the final recipient.\n @dev                        The redeemer specifies details about the Bitcoin redemption tx and pays for the redemption\n                             on behalf of _finalRecipient.\n @param  _d                  Deposit storage pointer.\n @param  _outputValueBytes   The 8-byte LE output size.\n @param  _redeemerOutputScript The redeemer's length-prefixed output script.\n @param  _finalRecipient     The address to receive the TDT and later be recorded as deposit redeemer.",
            "id": 2737,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferAndRequestRedemption",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2712,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2705,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 2737,
                  "src": "6588:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2704,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "6588:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2707,
                  "name": "_outputValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 2737,
                  "src": "6629:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 2706,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6629:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2709,
                  "name": "_redeemerOutputScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 2737,
                  "src": "6663:34:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2708,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6663:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2711,
                  "name": "_finalRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 2737,
                  "src": "6707:31:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 2710,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6707:15:5",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6578:166:5"
            },
            "returnParameters": {
              "id": 2713,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6752:0:5"
            },
            "scope": 3269,
            "src": "6541:566:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2754,
              "nodeType": "Block",
              "src": "7748:208:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2747,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2739,
                        "src": "7847:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2748,
                        "name": "_outputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2741,
                        "src": "7863:17:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2749,
                        "name": "_redeemerOutputScript",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2743,
                        "src": "7894:21:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2750,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18360,
                          "src": "7929:3:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2751,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7929:10:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 2746,
                      "name": "_requestRedemption",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2703,
                      "src": "7815:18:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes8_$_t_bytes_memory_ptr_$_t_address_payable_$returns$__$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes memory,address payable)"
                      }
                    },
                    "id": 2752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7815:134:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2753,
                  "nodeType": "ExpressionStatement",
                  "src": "7815:134:5"
                }
              ]
            },
            "documentation": "@notice                     Only TDT holder can request redemption,\n                             unless Deposit is expired or in COURTESY_CALL.\n @dev                        The redeemer specifies details about the Bitcoin redemption transaction.\n @param  _d                  Deposit storage pointer.\n @param  _outputValueBytes   The 8-byte LE output size.\n @param  _redeemerOutputScript The redeemer's length-prefixed output script.",
            "id": 2755,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "requestRedemption",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2744,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2739,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 2755,
                  "src": "7625:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2738,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "7625:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2741,
                  "name": "_outputValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 2755,
                  "src": "7666:24:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 2740,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "7666:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2743,
                  "name": "_redeemerOutputScript",
                  "nodeType": "VariableDeclaration",
                  "scope": 2755,
                  "src": "7700:34:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2742,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7700:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7615:125:5"
            },
            "returnParameters": {
              "id": 2745,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7748:0:5"
            },
            "scope": 3269,
            "src": "7589:367:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2810,
              "nodeType": "Block",
              "src": "8519:1190:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2767,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2757,
                            "src": "8550:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2768,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inAwaitingWithdrawalSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3516,
                          "src": "8550:32:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                          }
                        },
                        "id": 2769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8550:34:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f742063757272656e746c79206177616974696e672061207369676e6174757265",
                        "id": 2770,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8598:36:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7f1554af04c7494845f652eef1b9c0205d41f382eeafa05cc3b4d8b6c1803e50",
                          "typeString": "literal_string \"Not currently awaiting a signature\""
                        },
                        "value": "Not currently awaiting a signature"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7f1554af04c7494845f652eef1b9c0205d41f382eeafa05cc3b4d8b6c1803e50",
                          "typeString": "literal_string \"Not currently awaiting a signature\""
                        }
                      ],
                      "id": 2766,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "8529:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8529:115:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2772,
                  "nodeType": "ExpressionStatement",
                  "src": "8529:115:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2778,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2775,
                              "name": "_s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2763,
                              "src": "9128:2:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 2774,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9120:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 2776,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9120:11:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130",
                          "id": 2777,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9151:66:5",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1",
                            "typeString": "int_const 5789...(69 digits omitted)...7168"
                          },
                          "value": "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"
                        },
                        "src": "9120:97:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d616c6c6561626c65207369676e6174757265202d20732073686f756c6420626520696e20746865206c6f772068616c66206f6620736563703235366b312063757276652773206f72646572",
                        "id": 2779,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9231:78:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c3d0b8f14749d133bb624c3b8bae877765b25d6c61c3b704bc39bab3fd16d0d5",
                          "typeString": "literal_string \"Malleable signature - s should be in the low half of secp256k1 curve's order\""
                        },
                        "value": "Malleable signature - s should be in the low half of secp256k1 curve's order"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c3d0b8f14749d133bb624c3b8bae877765b25d6c61c3b704bc39bab3fd16d0d5",
                          "typeString": "literal_string \"Malleable signature - s should be in the low half of secp256k1 curve's order\""
                        }
                      ],
                      "id": 2773,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "9099:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2780,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9099:220:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2781,
                  "nodeType": "ExpressionStatement",
                  "src": "9099:220:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2787,
                              "name": "_d",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2757,
                              "src": "9431:2:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                "typeString": "struct DepositUtils.Deposit storage pointer"
                              }
                            },
                            "id": 2788,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "lastRequestedDigest",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3878,
                            "src": "9431:22:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2789,
                            "name": "_v",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2759,
                            "src": "9455:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2790,
                            "name": "_r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2761,
                            "src": "9459:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2791,
                            "name": "_s",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2763,
                            "src": "9463:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2783,
                                "name": "_d",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2757,
                                "src": "9404:2:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              },
                              "id": 2784,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "signerPubkey",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4428,
                              "src": "9404:15:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                                "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes memory)"
                              }
                            },
                            "id": 2785,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9404:17:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2786,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "checkSig",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 13626,
                          "src": "9404:26:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,bytes32,uint8,bytes32,bytes32) pure returns (bool)"
                          }
                        },
                        "id": 2792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9404:62:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964207369676e6174757265",
                        "id": 2793,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9480:19:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4f2d7dfcb27c0aafa13ae8c400de482c7832204d194018b6e45bd2bf244c74e7",
                          "typeString": "literal_string \"Invalid signature\""
                        },
                        "value": "Invalid signature"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4f2d7dfcb27c0aafa13ae8c400de482c7832204d194018b6e45bd2bf244c74e7",
                          "typeString": "literal_string \"Invalid signature\""
                        }
                      ],
                      "id": 2782,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "9383:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9383:126:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2795,
                  "nodeType": "ExpressionStatement",
                  "src": "9383:126:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2796,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2757,
                        "src": "9601:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2798,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setAwaitingWithdrawalProof",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3702,
                      "src": "9601:29:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 2799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9601:31:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2800,
                  "nodeType": "ExpressionStatement",
                  "src": "9601:31:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2804,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2757,
                          "src": "9671:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2805,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "lastRequestedDigest",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3878,
                        "src": "9671:22:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2806,
                        "name": "_r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2761,
                        "src": "9695:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2807,
                        "name": "_s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2763,
                        "src": "9699:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2801,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2757,
                        "src": "9642:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2803,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "logGotRedemptionSignature",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5199,
                      "src": "9642:28:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes32,bytes32,bytes32)"
                      }
                    },
                    "id": 2808,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9642:60:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2809,
                  "nodeType": "ExpressionStatement",
                  "src": "9642:60:5"
                }
              ]
            },
            "documentation": "@notice     Anyone may provide a withdrawal signature if it was requested.\n @dev        The signers will be penalized if this (or provideRedemptionProof) is not called.\n @param  _d  Deposit storage pointer.\n @param  _v  Signature recovery value.\n @param  _r  Signature R value.\n @param  _s  Signature S value. Should be in the low half of secp256k1 curve's order.",
            "id": 2811,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "provideRedemptionSignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2757,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 2811,
                  "src": "8414:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2756,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "8414:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2759,
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "scope": 2811,
                  "src": "8455:8:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 2758,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "8455:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2761,
                  "name": "_r",
                  "nodeType": "VariableDeclaration",
                  "scope": 2811,
                  "src": "8473:10:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2760,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8473:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2763,
                  "name": "_s",
                  "nodeType": "VariableDeclaration",
                  "scope": 2811,
                  "src": "8493:10:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2762,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8493:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8404:105:5"
            },
            "returnParameters": {
              "id": 2765,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8519:0:5"
            },
            "scope": 3269,
            "src": "8369:1340:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2929,
              "nodeType": "Block",
              "src": "10288:1796:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2821,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2813,
                            "src": "10319:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2822,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inAwaitingWithdrawalProof",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3532,
                          "src": "10319:28:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                          }
                        },
                        "id": 2823,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10319:30:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "46656520696e637265617365206f6e6c7920617661696c61626c65206166746572207369676e61747572652070726f7669646564",
                        "id": 2824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10363:54:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7f9ebedad8dc3a9a9126be78859ee9786dae9a4bb98ff498149b89effa1dd4b9",
                          "typeString": "literal_string \"Fee increase only available after signature provided\""
                        },
                        "value": "Fee increase only available after signature provided"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7f9ebedad8dc3a9a9126be78859ee9786dae9a4bb98ff498149b89effa1dd4b9",
                          "typeString": "literal_string \"Fee increase only available after signature provided\""
                        }
                      ],
                      "id": 2820,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "10298:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10298:129:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2826,
                  "nodeType": "ExpressionStatement",
                  "src": "10298:129:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2837,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2828,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18350,
                            "src": "10458:5:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 2829,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10458:15:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2833,
                                  "name": "TBTCConstants",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6757,
                                  "src": "10543:13:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_TBTCConstants_$6757_$",
                                    "typeString": "type(library TBTCConstants)"
                                  }
                                },
                                "id": 2834,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getIncreaseFeeTimer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6700,
                                "src": "10543:33:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_delegatecall_pure$__$returns$_t_uint256_$",
                                  "typeString": "function () pure returns (uint256)"
                                }
                              },
                              "id": 2835,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10543:35:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2830,
                                "name": "_d",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2813,
                                "src": "10493:2:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              },
                              "id": 2831,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "withdrawalRequestTime",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3876,
                              "src": "10493:24:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2832,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16749,
                            "src": "10493:28:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10493:103:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10458:138:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "46656520696e637265617365206e6f7420796574207065726d6974746564",
                        "id": 2838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10610:32:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_34b61a836d5fefbaea10023b58b98f8d103beaa28d26249237d27c54fea12ecf",
                          "typeString": "literal_string \"Fee increase not yet permitted\""
                        },
                        "value": "Fee increase not yet permitted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_34b61a836d5fefbaea10023b58b98f8d103beaa28d26249237d27c54fea12ecf",
                          "typeString": "literal_string \"Fee increase not yet permitted\""
                        }
                      ],
                      "id": 2827,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "10437:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10437:215:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2840,
                  "nodeType": "ExpressionStatement",
                  "src": "10437:215:5"
                },
                {
                  "assignments": [
                    2842
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2842,
                      "name": "_newOutputValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 2929,
                      "src": "10663:23:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2841,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10663:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2848,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2844,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2813,
                        "src": "10746:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2845,
                        "name": "_previousOutputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2815,
                        "src": "10766:25:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2846,
                        "name": "_newOutputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2817,
                        "src": "10809:20:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      ],
                      "id": 2843,
                      "name": "checkRelationshipToPrevious",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2994,
                      "src": "10701:27:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes8_$_t_bytes8_$returns$_t_uint256_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes8) view returns (uint256)"
                      }
                    },
                    "id": 2847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10701:142:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10663:180:5"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2853,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2849,
                      "name": "_newOutputValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2842,
                      "src": "11058:15:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2850,
                          "name": "TBTCConstants",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6757,
                          "src": "11076:13:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TBTCConstants_$6757_$",
                            "typeString": "type(library TBTCConstants)"
                          }
                        },
                        "id": 2851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getMinimumUtxoValue",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6724,
                        "src": "11076:33:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_pure$__$returns$_t_uint256_$",
                          "typeString": "function () pure returns (uint256)"
                        }
                      },
                      "id": 2852,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11076:35:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11058:53:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2861,
                  "nodeType": "IfStatement",
                  "src": "11054:137:5",
                  "trueBody": {
                    "id": 2860,
                    "nodeType": "Block",
                    "src": "11113:78:5",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2858,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2854,
                            "name": "_newOutputValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2842,
                            "src": "11127:15:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2855,
                                "name": "TBTCConstants",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6757,
                                "src": "11145:13:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_TBTCConstants_$6757_$",
                                  "typeString": "type(library TBTCConstants)"
                                }
                              },
                              "id": 2856,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getMinimumUtxoValue",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6724,
                              "src": "11145:33:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_pure$__$returns$_t_uint256_$",
                                "typeString": "function () pure returns (uint256)"
                              }
                            },
                            "id": 2857,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11145:35:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11127:53:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2859,
                        "nodeType": "ExpressionStatement",
                        "src": "11127:53:5"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2862,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2813,
                        "src": "11201:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2864,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "latestRedemptionFee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3874,
                      "src": "11201:22:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2869,
                          "name": "_newOutputValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2842,
                          "src": "11245:15:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2865,
                              "name": "_d",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2813,
                              "src": "11226:2:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                "typeString": "struct DepositUtils.Deposit storage pointer"
                              }
                            },
                            "id": 2866,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "utxoValue",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4471,
                            "src": "11226:12:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                              "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            }
                          },
                          "id": 2867,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11226:14:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2868,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 16774,
                        "src": "11226:18:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2870,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11226:35:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11201:60:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2872,
                  "nodeType": "ExpressionStatement",
                  "src": "11201:60:5"
                },
                {
                  "assignments": [
                    2874
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2874,
                      "name": "_sighash",
                      "nodeType": "VariableDeclaration",
                      "scope": 2929,
                      "src": "11310:16:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2873,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11310:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2888,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2877,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2813,
                          "src": "11392:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2878,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "utxoOutpoint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3884,
                        "src": "11392:15:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2879,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2813,
                            "src": "11425:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2880,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "signerPKH",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4458,
                          "src": "11425:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bytes20_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes20)"
                          }
                        },
                        "id": 2881,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11425:14:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2882,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2813,
                          "src": "11457:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2883,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "utxoValueBytes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3880,
                        "src": "11457:17:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2884,
                        "name": "_newOutputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2817,
                        "src": "11492:20:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2885,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2813,
                          "src": "11530:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2886,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemerOutputScript",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3870,
                        "src": "11530:23:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        },
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2875,
                        "name": "CheckBitcoinSigs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13824,
                        "src": "11341:16:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_CheckBitcoinSigs_$13824_$",
                          "typeString": "type(library CheckBitcoinSigs)"
                        }
                      },
                      "id": 2876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "wpkhSpendSighash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13771,
                      "src": "11341:33:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes20_$_t_bytes8_$_t_bytes8_$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory,bytes20,bytes8,bytes8,bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11341:226:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11310:257:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2889,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2813,
                        "src": "11641:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2891,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "withdrawalRequestTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3876,
                      "src": "11641:24:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2892,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18350,
                        "src": "11668:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 2893,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11668:15:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11641:42:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2895,
                  "nodeType": "ExpressionStatement",
                  "src": "11641:42:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2896,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2813,
                        "src": "11693:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2898,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastRequestedDigest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3878,
                      "src": "11693:22:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2899,
                      "name": "_sighash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2874,
                      "src": "11718:8:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "11693:33:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 2901,
                  "nodeType": "ExpressionStatement",
                  "src": "11693:33:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2903,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2813,
                        "src": "11751:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2904,
                        "name": "_sighash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2874,
                        "src": "11755:8:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 2902,
                      "name": "approveDigest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2450,
                      "src": "11737:13:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes32_$returns$__$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes32)"
                      }
                    },
                    "id": 2905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11737:27:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2906,
                  "nodeType": "ExpressionStatement",
                  "src": "11737:27:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2907,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2813,
                        "src": "11821:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2909,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setAwaitingWithdrawalSignature",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3687,
                      "src": "11821:33:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 2910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11821:35:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2911,
                  "nodeType": "ExpressionStatement",
                  "src": "11821:35:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2915,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18360,
                          "src": "11905:3:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "11905:10:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2917,
                        "name": "_sighash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2874,
                        "src": "11929:8:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2918,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2813,
                            "src": "11951:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2919,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "utxoValue",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4471,
                          "src": "11951:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 2920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11951:14:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2921,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2813,
                          "src": "11979:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2922,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemerOutputScript",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3870,
                        "src": "11979:23:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2923,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2813,
                          "src": "12016:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2924,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "latestRedemptionFee",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3874,
                        "src": "12016:22:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2925,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2813,
                          "src": "12052:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2926,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "utxoOutpoint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3884,
                        "src": "12052:15:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2912,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2813,
                        "src": "11866:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 2914,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "logRedemptionRequested",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5170,
                      "src": "11866:25:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,address,bytes32,uint256,bytes memory,uint256,bytes memory)"
                      }
                    },
                    "id": 2927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11866:211:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2928,
                  "nodeType": "ExpressionStatement",
                  "src": "11866:211:5"
                }
              ]
            },
            "documentation": "@notice                             Anyone may notify the contract that a fee bump is needed.\n @dev                                This sends us back to AWAITING_WITHDRAWAL_SIGNATURE.\n @param  _d                          Deposit storage pointer.\n @param  _previousOutputValueBytes   The previous output's value.\n @param  _newOutputValueBytes        The new output's value.",
            "id": 2930,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "increaseRedemptionFee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2818,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2813,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 2930,
                  "src": "10164:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2812,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "10164:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2815,
                  "name": "_previousOutputValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 2930,
                  "src": "10205:32:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 2814,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10205:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2817,
                  "name": "_newOutputValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 2930,
                  "src": "10247:27:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 2816,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10247:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10154:126:5"
            },
            "returnParameters": {
              "id": 2819,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10288:0:5"
            },
            "scope": 3269,
            "src": "10124:1960:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2993,
              "nodeType": "Block",
              "src": "12299:1016:5",
              "statements": [
                {
                  "assignments": [
                    2942
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2942,
                      "name": "_previousOutputValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 2993,
                      "src": "12396:28:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2941,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12396:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2947,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2945,
                        "name": "_previousOutputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2934,
                        "src": "12467:25:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2943,
                        "name": "DepositUtils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5103,
                        "src": "12439:12:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_DepositUtils_$5103_$",
                          "typeString": "type(library DepositUtils)"
                        }
                      },
                      "id": 2944,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "bytes8LEToUint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4520,
                      "src": "12439:27:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_pure$_t_bytes8_$returns$_t_uint256_$",
                        "typeString": "function (bytes8) pure returns (uint256)"
                      }
                    },
                    "id": 2946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12439:54:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12396:97:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2953,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2948,
                      "name": "_newOutputValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2939,
                      "src": "12503:15:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2951,
                          "name": "_newOutputValueBytes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2936,
                          "src": "12549:20:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes8",
                            "typeString": "bytes8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes8",
                            "typeString": "bytes8"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 2949,
                          "name": "DepositUtils",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5103,
                          "src": "12521:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_DepositUtils_$5103_$",
                            "typeString": "type(library DepositUtils)"
                          }
                        },
                        "id": 2950,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "bytes8LEToUint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4520,
                        "src": "12521:27:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_pure$_t_bytes8_$returns$_t_uint256_$",
                          "typeString": "function (bytes8) pure returns (uint256)"
                        }
                      },
                      "id": 2952,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12521:49:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12503:67:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2954,
                  "nodeType": "ExpressionStatement",
                  "src": "12503:67:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2962,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2958,
                              "name": "_newOutputValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2939,
                              "src": "12626:15:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2956,
                              "name": "_previousOutputValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2942,
                              "src": "12601:20:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2957,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16774,
                            "src": "12601:24:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12601:41:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2960,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2932,
                            "src": "12662:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2961,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "initialRedemptionFee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3872,
                          "src": "12662:23:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12601:84:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420616e20616c6c6f776564206665652073746570",
                        "id": 2963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12699:25:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_73070d97ee2d97fee4f5ee54e5f84e76381e76e0080eb0dd288e9ee00410e6fb",
                          "typeString": "literal_string \"Not an allowed fee step\""
                        },
                        "value": "Not an allowed fee step"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_73070d97ee2d97fee4f5ee54e5f84e76381e76e0080eb0dd288e9ee00410e6fb",
                          "typeString": "literal_string \"Not an allowed fee step\""
                        }
                      ],
                      "id": 2955,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "12580:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12580:154:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2965,
                  "nodeType": "ExpressionStatement",
                  "src": "12580:154:5"
                },
                {
                  "assignments": [
                    2967
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2967,
                      "name": "_previousSighash",
                      "nodeType": "VariableDeclaration",
                      "scope": 2993,
                      "src": "12834:24:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2966,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12834:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2981,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2970,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2932,
                          "src": "12924:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2971,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "utxoOutpoint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3884,
                        "src": "12924:15:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2972,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2932,
                            "src": "12957:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2973,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "signerPKH",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4458,
                          "src": "12957:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bytes20_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes20)"
                          }
                        },
                        "id": 2974,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12957:14:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2975,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2932,
                          "src": "12989:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2976,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "utxoValueBytes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3880,
                        "src": "12989:17:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2977,
                        "name": "_previousOutputValueBytes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2934,
                        "src": "13024:25:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2978,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2932,
                          "src": "13067:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 2979,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "redeemerOutputScript",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3870,
                        "src": "13067:23:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        },
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes_storage",
                          "typeString": "bytes storage ref"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2968,
                        "name": "CheckBitcoinSigs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13824,
                        "src": "12873:16:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_CheckBitcoinSigs_$13824_$",
                          "typeString": "type(library CheckBitcoinSigs)"
                        }
                      },
                      "id": 2969,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "wpkhSpendSighash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13771,
                      "src": "12873:33:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes20_$_t_bytes8_$_t_bytes8_$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory,bytes20,bytes8,bytes8,bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12873:231:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12834:270:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2985,
                              "name": "_previousSighash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2967,
                              "src": "13166:16:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2983,
                              "name": "_d",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2932,
                              "src": "13135:2:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                "typeString": "struct DepositUtils.Deposit storage pointer"
                              }
                            },
                            "id": 2984,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "wasDigestApprovedForSigning",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4535,
                            "src": "13135:30:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes32_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                              "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes32) view returns (uint256)"
                            }
                          },
                          "id": 2986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13135:48:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 2987,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2932,
                            "src": "13203:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 2988,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "withdrawalRequestTime",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3876,
                          "src": "13203:24:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13135:92:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50726f76696465642070726576696f75732076616c756520646f6573206e6f74207969656c642070726576696f75732073696768617368",
                        "id": 2990,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13241:57:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8358de3755f4cf5c12654571a27cfafc3028b24d68e0de14cdd61cc3bb7bda1b",
                          "typeString": "literal_string \"Provided previous value does not yield previous sighash\""
                        },
                        "value": "Provided previous value does not yield previous sighash"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8358de3755f4cf5c12654571a27cfafc3028b24d68e0de14cdd61cc3bb7bda1b",
                          "typeString": "literal_string \"Provided previous value does not yield previous sighash\""
                        }
                      ],
                      "id": 2982,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "13114:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13114:194:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2992,
                  "nodeType": "ExpressionStatement",
                  "src": "13114:194:5"
                }
              ]
            },
            "documentation": null,
            "id": 2994,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkRelationshipToPrevious",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2937,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2932,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 2994,
                  "src": "12136:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2931,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "12136:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2934,
                  "name": "_previousOutputValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 2994,
                  "src": "12177:32:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 2933,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "12177:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2936,
                  "name": "_newOutputValueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 2994,
                  "src": "12219:27:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 2935,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "12219:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12126:126:5"
            },
            "returnParameters": {
              "id": 2940,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2939,
                  "name": "_newOutputValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 2994,
                  "src": "12274:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2938,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12274:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12273:25:5"
            },
            "scope": 3269,
            "src": "12090:1225:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3099,
              "nodeType": "Block",
              "src": "14537:1135:5",
              "statements": [
                {
                  "assignments": [
                    3014
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3014,
                      "name": "_txid",
                      "nodeType": "VariableDeclaration",
                      "scope": 3099,
                      "src": "14604:13:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3013,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "14604:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3015,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14604:13:5"
                },
                {
                  "assignments": [
                    3017
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3017,
                      "name": "_fundingOutputValue",
                      "nodeType": "VariableDeclaration",
                      "scope": 3099,
                      "src": "14627:27:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3016,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14627:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3018,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14627:27:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3020,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2996,
                            "src": "14686:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 3021,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inRedemption",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3361,
                          "src": "14686:15:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                          }
                        },
                        "id": 3022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14686:17:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526564656d7074696f6e2070726f6f66206f6e6c7920616c6c6f7765642066726f6d20726564656d7074696f6e20666c6f77",
                        "id": 3023,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14717:52:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_55495d2a20faf92bc3476b6e0e08b10d7cf379882918ee014090383c3adfa7fe",
                          "typeString": "literal_string \"Redemption proof only allowed from redemption flow\""
                        },
                        "value": "Redemption proof only allowed from redemption flow"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_55495d2a20faf92bc3476b6e0e08b10d7cf379882918ee014090383c3adfa7fe",
                          "typeString": "literal_string \"Redemption proof only allowed from redemption flow\""
                        }
                      ],
                      "id": 3019,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "14665:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14665:114:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3025,
                  "nodeType": "ExpressionStatement",
                  "src": "14665:114:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3026,
                      "name": "_fundingOutputValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3017,
                      "src": "14790:19:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3028,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2996,
                          "src": "14853:2:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3029,
                          "name": "_txInputVector",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3000,
                          "src": "14869:14:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3030,
                          "name": "_txOutputVector",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3002,
                          "src": "14897:15:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 3027,
                        "name": "redemptionTransactionChecks",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3202,
                        "src": "14812:27:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes memory,bytes memory) view returns (uint256)"
                        }
                      },
                      "id": 3031,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14812:110:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14790:132:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3033,
                  "nodeType": "ExpressionStatement",
                  "src": "14790:132:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3044,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3034,
                      "name": "_txid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3014,
                      "src": "14933:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3037,
                              "name": "_txVersion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2998,
                              "src": "14984:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3038,
                              "name": "_txInputVector",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3000,
                              "src": "15008:14:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3039,
                              "name": "_txOutputVector",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3002,
                              "src": "15036:15:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3040,
                              "name": "_txLocktime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3004,
                              "src": "15065:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3035,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18347,
                              "src": "14941:3:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 3036,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "14941:29:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 3041,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14941:145:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 3042,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hash256",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11851,
                        "src": "14941:166:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 3043,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14941:168:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "14933:176:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 3045,
                  "nodeType": "ExpressionStatement",
                  "src": "14933:176:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3049,
                        "name": "_txid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3014,
                        "src": "15154:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3050,
                        "name": "_merkleProof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3006,
                        "src": "15173:12:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3051,
                        "name": "_txIndexInBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3008,
                        "src": "15199:15:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3052,
                        "name": "_bitcoinHeaders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3010,
                        "src": "15228:15:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3046,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2996,
                        "src": "15119:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 3048,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkProofFromTxId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4069,
                      "src": "15119:21:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes32,bytes memory,uint256,bytes memory) view"
                      }
                    },
                    "id": 3053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15119:134:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3054,
                  "nodeType": "ExpressionStatement",
                  "src": "15119:134:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3065,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3060,
                                  "name": "_fundingOutputValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3017,
                                  "src": "15305:19:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3056,
                                      "name": "_d",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2996,
                                      "src": "15286:2:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                        "typeString": "struct DepositUtils.Deposit storage pointer"
                                      }
                                    },
                                    "id": 3057,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "utxoValue",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4471,
                                    "src": "15286:12:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                                      "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                                    }
                                  },
                                  "id": 3058,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15286:14:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 3059,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 16774,
                                "src": "15286:18:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 3061,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15286:39:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 3062,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "15285:41:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3063,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2996,
                            "src": "15330:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 3064,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "latestRedemptionFee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3874,
                          "src": "15330:22:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15285:67:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e636f72726563742066656520616d6f756e74",
                        "id": 3066,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15366:22:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4ab3f952ba26a94d88e8cd9fe7400356e417913015cdeb4af2c4bbd982e459f1",
                          "typeString": "literal_string \"Incorrect fee amount\""
                        },
                        "value": "Incorrect fee amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4ab3f952ba26a94d88e8cd9fe7400356e417913015cdeb4af2c4bbd982e459f1",
                          "typeString": "literal_string \"Incorrect fee amount\""
                        }
                      ],
                      "id": 3055,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "15264:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3067,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15264:134:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3068,
                  "nodeType": "ExpressionStatement",
                  "src": "15264:134:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3070,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2996,
                        "src": "15485:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      ],
                      "id": 3069,
                      "name": "distributeSignerFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2425,
                      "src": "15465:19:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 3071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15465:23:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3072,
                  "nodeType": "ExpressionStatement",
                  "src": "15465:23:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3073,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2996,
                        "src": "15498:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 3075,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "closeKeep",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3911,
                      "src": "15498:12:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 3076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15498:14:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3077,
                  "nodeType": "ExpressionStatement",
                  "src": "15498:14:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3078,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2996,
                        "src": "15523:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 3080,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "distributeFeeRebate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4843,
                      "src": "15523:22:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 3081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15523:24:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3082,
                  "nodeType": "ExpressionStatement",
                  "src": "15523:24:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3083,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2996,
                        "src": "15585:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 3085,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setRedeemed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3717,
                      "src": "15585:14:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 3086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15585:16:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3087,
                  "nodeType": "ExpressionStatement",
                  "src": "15585:16:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3088,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2996,
                        "src": "15611:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 3090,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redemptionTeardown",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4636,
                      "src": "15611:21:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer)"
                      }
                    },
                    "id": 3091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15611:23:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3092,
                  "nodeType": "ExpressionStatement",
                  "src": "15611:23:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3096,
                        "name": "_txid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3014,
                        "src": "15659:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3093,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2996,
                        "src": "15644:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 3095,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "logRedeemed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5377,
                      "src": "15644:14:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes32_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes32)"
                      }
                    },
                    "id": 3097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15644:21:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3098,
                  "nodeType": "ExpressionStatement",
                  "src": "15644:21:5"
                }
              ]
            },
            "documentation": "@notice                 Anyone may provide a withdrawal proof to prove redemption.\n @dev                    The signers will be penalized if this is not called.\n @param  _d              Deposit storage pointer.\n @param  _txVersion      Transaction version number (4-byte LE).\n @param  _txInputVector  All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\n @param  _txOutputVector All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\n @param  _txLocktime     Final 4 bytes of the transaction.\n @param  _merkleProof    The merkle proof of inclusion of the tx in the bitcoin block.\n @param  _txIndexInBlock The index of the tx in the Bitcoin block (0-indexed).\n @param  _bitcoinHeaders An array of tightly-packed bitcoin headers.",
            "id": 3100,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "provideRedemptionProof",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3011,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2996,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 3100,
                  "src": "14256:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2995,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "14256:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2998,
                  "name": "_txVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 3100,
                  "src": "14297:17:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 2997,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "14297:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3000,
                  "name": "_txInputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 3100,
                  "src": "14324:27:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2999,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14324:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3002,
                  "name": "_txOutputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 3100,
                  "src": "14361:28:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3001,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14361:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3004,
                  "name": "_txLocktime",
                  "nodeType": "VariableDeclaration",
                  "scope": 3100,
                  "src": "14399:18:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 3003,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "14399:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3006,
                  "name": "_merkleProof",
                  "nodeType": "VariableDeclaration",
                  "scope": 3100,
                  "src": "14427:25:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3005,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14427:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3008,
                  "name": "_txIndexInBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 3100,
                  "src": "14462:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3007,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14462:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3010,
                  "name": "_bitcoinHeaders",
                  "nodeType": "VariableDeclaration",
                  "scope": 3100,
                  "src": "14495:28:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3009,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14495:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14246:283:5"
            },
            "returnParameters": {
              "id": 3012,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14537:0:5"
            },
            "scope": 3269,
            "src": "14215:1457:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3201,
              "nodeType": "Block",
              "src": "16835:1032:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3112,
                            "name": "_txInputVector",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3104,
                            "src": "16853:14:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 3113,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validateVin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12774,
                          "src": "16853:26:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (bool)"
                          }
                        },
                        "id": 3114,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16853:28:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c696420696e70757420766563746f722070726f7669646564",
                        "id": 3115,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16883:31:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_50569d922bdc14a5fab9eaf6cfc2b8f7434918cbe4e7c29ccc434b2a080a8a82",
                          "typeString": "literal_string \"invalid input vector provided\""
                        },
                        "value": "invalid input vector provided"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_50569d922bdc14a5fab9eaf6cfc2b8f7434918cbe4e7c29ccc434b2a080a8a82",
                          "typeString": "literal_string \"invalid input vector provided\""
                        }
                      ],
                      "id": 3111,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "16845:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16845:70:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3117,
                  "nodeType": "ExpressionStatement",
                  "src": "16845:70:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3119,
                            "name": "_txOutputVector",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3106,
                            "src": "16946:15:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 3120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validateVout",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12866,
                          "src": "16946:28:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (bool)"
                          }
                        },
                        "id": 3121,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16946:30:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c6964206f757470757420766563746f722070726f7669646564",
                        "id": 3122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16990:32:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a33d06f17f9a7037734a39e63c195f479a3381b57e1fdb94340fd16475711edf",
                          "typeString": "literal_string \"invalid output vector provided\""
                        },
                        "value": "invalid output vector provided"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a33d06f17f9a7037734a39e63c195f479a3381b57e1fdb94340fd16475711edf",
                          "typeString": "literal_string \"invalid output vector provided\""
                        }
                      ],
                      "id": 3118,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "16925:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16925:107:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3124,
                  "nodeType": "ExpressionStatement",
                  "src": "16925:107:5"
                },
                {
                  "assignments": [
                    3126
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3126,
                      "name": "_input",
                      "nodeType": "VariableDeclaration",
                      "scope": 3201,
                      "src": "17042:19:5",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 3125,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "17042:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3135,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 3129,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17097:1:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3133,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3130,
                            "name": "_txInputVector",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3104,
                            "src": "17100:14:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 3131,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "17100:21:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 3132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17124:1:5",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "17100:25:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3127,
                        "name": "_txInputVector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3104,
                        "src": "17076:14:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 3128,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "slice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13281,
                      "src": "17076:20:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                      }
                    },
                    "id": 3134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17076:50:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17042:84:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 3146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3138,
                                  "name": "_input",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3126,
                                  "src": "17168:6:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 3139,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "extractOutpoint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 12249,
                                "src": "17168:22:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory) pure returns (bytes memory)"
                                }
                              },
                              "id": 3140,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17168:24:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3137,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18354,
                            "src": "17158:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 3141,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17158:35:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3143,
                                "name": "_d",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3102,
                                "src": "17207:2:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              },
                              "id": 3144,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "utxoOutpoint",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3884,
                              "src": "17207:15:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage",
                                "typeString": "bytes storage ref"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_storage",
                                "typeString": "bytes storage ref"
                              }
                            ],
                            "id": 3142,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18354,
                            "src": "17197:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 3145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17197:26:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "17158:65:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5478207370656e6473207468652077726f6e67205554584f",
                        "id": 3147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17237:26:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_bdf35aaab9c3b52145f0e9bf278e28d0c3ed0f752303b82cd9efbe3c1fea3306",
                          "typeString": "literal_string \"Tx spends the wrong UTXO\""
                        },
                        "value": "Tx spends the wrong UTXO"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_bdf35aaab9c3b52145f0e9bf278e28d0c3ed0f752303b82cd9efbe3c1fea3306",
                          "typeString": "literal_string \"Tx spends the wrong UTXO\""
                        }
                      ],
                      "id": 3136,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "17137:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17137:136:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3149,
                  "nodeType": "ExpressionStatement",
                  "src": "17137:136:5"
                },
                {
                  "assignments": [
                    3151
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3151,
                      "name": "_output",
                      "nodeType": "VariableDeclaration",
                      "scope": 3201,
                      "src": "17284:20:5",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 3150,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "17284:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3160,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 3154,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17341:1:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3155,
                            "name": "_txOutputVector",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3106,
                            "src": "17344:15:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 3156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "17344:22:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 3157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17369:1:5",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "17344:26:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3152,
                        "name": "_txOutputVector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3106,
                        "src": "17319:15:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 3153,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "slice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13281,
                      "src": "17319:21:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                      }
                    },
                    "id": 3159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17319:52:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17284:87:5"
                },
                {
                  "assignments": [
                    3162
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3162,
                      "name": "_expectedOutputScript",
                      "nodeType": "VariableDeclaration",
                      "scope": 3201,
                      "src": "17381:34:5",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 3161,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "17381:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3165,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 3163,
                      "name": "_d",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3102,
                      "src": "17418:2:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                        "typeString": "struct DepositUtils.Deposit storage pointer"
                      }
                    },
                    "id": 3164,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "redeemerOutputScript",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3870,
                    "src": "17418:23:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage",
                      "typeString": "bytes storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17381:60:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3174,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3167,
                              "name": "_output",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3151,
                              "src": "17472:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3168,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17472:14:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "38",
                            "id": 3169,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17489:1:5",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "17472:18:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3171,
                              "name": "_d",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3102,
                              "src": "17494:2:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                "typeString": "struct DepositUtils.Deposit storage pointer"
                              }
                            },
                            "id": 3172,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "redeemerOutputScript",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3870,
                            "src": "17494:23:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage",
                              "typeString": "bytes storage ref"
                            }
                          },
                          "id": 3173,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "17494:30:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17472:52:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f75747075742073637269707420697320746f6f2073686f727420746f20657874726163742074686520657870656374656420736372697074",
                        "id": 3175,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17538:59:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3177d29cc9ac9a8d5907859e05db923b9a89c60a9526b22858f4e22d036a341a",
                          "typeString": "literal_string \"Output script is too short to extract the expected script\""
                        },
                        "value": "Output script is too short to extract the expected script"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3177d29cc9ac9a8d5907859e05db923b9a89c60a9526b22858f4e22d036a341a",
                          "typeString": "literal_string \"Output script is too short to extract the expected script\""
                        }
                      ],
                      "id": 3166,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "17451:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17451:156:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3177,
                  "nodeType": "ExpressionStatement",
                  "src": "17451:156:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 3190,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "38",
                                  "id": 3182,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "17662:1:5",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3183,
                                    "name": "_expectedOutputScript",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3162,
                                    "src": "17665:21:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 3184,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "17665:28:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3180,
                                  "name": "_output",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3151,
                                  "src": "17648:7:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 3181,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "slice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 13281,
                                "src": "17648:13:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                }
                              },
                              "id": 3185,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17648:46:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3179,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18354,
                            "src": "17638:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 3186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17638:57:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3188,
                              "name": "_expectedOutputScript",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3162,
                              "src": "17725:21:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3187,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18354,
                            "src": "17715:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 3189,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17715:32:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "17638:109:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "54782073656e64732076616c756520746f2077726f6e67206f757470757420736372697074",
                        "id": 3191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17761:39:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_44163b253b338a385561999b21cd7ba7e8989cb0c0d5b9a36675eaec02a14cfd",
                          "typeString": "literal_string \"Tx sends value to wrong output script\""
                        },
                        "value": "Tx sends value to wrong output script"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_44163b253b338a385561999b21cd7ba7e8989cb0c0d5b9a36675eaec02a14cfd",
                          "typeString": "literal_string \"Tx sends value to wrong output script\""
                        }
                      ],
                      "id": 3178,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "17617:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17617:193:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3193,
                  "nodeType": "ExpressionStatement",
                  "src": "17617:193:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 3195,
                                "name": "_output",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3151,
                                "src": "17836:7:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3196,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "extractValue",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12496,
                              "src": "17836:20:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint64_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) pure returns (uint64)"
                              }
                            },
                            "id": 3197,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17836:22:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "id": 3194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "17828:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 3198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17828:31:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 3199,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "17827:33:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3110,
                  "id": 3200,
                  "nodeType": "Return",
                  "src": "17820:40:5"
                }
              ]
            },
            "documentation": "@notice                 Check the redemption transaction input and output vector to ensure the transaction spends\n                         the correct UTXO and sends value to the appropriate public key hash.\n @dev                    We only look at the first input and first output. Revert if we find the wrong UTXO or value recipient.\n                         It's safe to look at only the first input/output as anything that breaks this can be considered fraud\n                         and can be caught by ECDSAFraudProof.\n @param  _d              Deposit storage pointer.\n @param _txInputVector   All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\n @param _txOutputVector  All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\n @return                 The value sent to the redeemer's public key hash.",
            "id": 3202,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redemptionTransactionChecks",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3102,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 3202,
                  "src": "16692:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3101,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "16692:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3104,
                  "name": "_txInputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 3202,
                  "src": "16733:27:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3103,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16733:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3106,
                  "name": "_txOutputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 3202,
                  "src": "16770:28:5",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3105,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16770:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16682:122:5"
            },
            "returnParameters": {
              "id": 3110,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3109,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3202,
                  "src": "16826:7:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3108,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16826:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16825:9:5"
            },
            "scope": 3269,
            "src": "16646:1221:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3234,
              "nodeType": "Block",
              "src": "18182:420:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3208,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3204,
                            "src": "18213:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 3209,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inAwaitingWithdrawalSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3516,
                          "src": "18213:32:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                          }
                        },
                        "id": 3210,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18213:34:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f742063757272656e746c79206177616974696e672061207369676e6174757265",
                        "id": 3211,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18261:36:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7f1554af04c7494845f652eef1b9c0205d41f382eeafa05cc3b4d8b6c1803e50",
                          "typeString": "literal_string \"Not currently awaiting a signature\""
                        },
                        "value": "Not currently awaiting a signature"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7f1554af04c7494845f652eef1b9c0205d41f382eeafa05cc3b4d8b6c1803e50",
                          "typeString": "literal_string \"Not currently awaiting a signature\""
                        }
                      ],
                      "id": 3207,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "18192:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18192:115:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3213,
                  "nodeType": "ExpressionStatement",
                  "src": "18192:115:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3215,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18350,
                            "src": "18338:5:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 3216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "18338:15:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3220,
                                  "name": "TBTCConstants",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6757,
                                  "src": "18422:13:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_TBTCConstants_$6757_$",
                                    "typeString": "type(library TBTCConstants)"
                                  }
                                },
                                "id": 3221,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getSignatureTimeout",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6692,
                                "src": "18422:33:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_delegatecall_pure$__$returns$_t_uint256_$",
                                  "typeString": "function () pure returns (uint256)"
                                }
                              },
                              "id": 3222,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18422:35:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3217,
                                "name": "_d",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3204,
                                "src": "18372:2:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              },
                              "id": 3218,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "withdrawalRequestTime",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3876,
                              "src": "18372:24:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3219,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16749,
                            "src": "18372:28:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 3223,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18372:103:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "18338:137:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5369676e61747572652074696d657220686173206e6f7420656c6170736564",
                        "id": 3225,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18489:33:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2e490460fbb0f0f31215b8bddba35dc1a72da328a15b10c0459929ad75b26aa9",
                          "typeString": "literal_string \"Signature timer has not elapsed\""
                        },
                        "value": "Signature timer has not elapsed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2e490460fbb0f0f31215b8bddba35dc1a72da328a15b10c0459929ad75b26aa9",
                          "typeString": "literal_string \"Signature timer has not elapsed\""
                        }
                      ],
                      "id": 3214,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "18317:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18317:215:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3227,
                  "nodeType": "ExpressionStatement",
                  "src": "18317:215:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 3231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18562:5:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3228,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3204,
                        "src": "18542:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 3230,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startLiquidation",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1957,
                      "src": "18542:19:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bool)"
                      }
                    },
                    "id": 3232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18542:26:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3233,
                  "nodeType": "ExpressionStatement",
                  "src": "18542:26:5"
                }
              ]
            },
            "documentation": "@notice     Anyone may notify the contract that the signers have failed to produce a signature.\n @dev        This is considered fraud, and is punished.\n @param  _d  Deposit storage pointer.",
            "id": 3235,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notifyRedemptionSignatureTimedOut",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3205,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3204,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 3235,
                  "src": "18128:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3203,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "18128:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18127:33:5"
            },
            "returnParameters": {
              "id": 3206,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18182:0:5"
            },
            "scope": 3269,
            "src": "18085:517:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3267,
              "nodeType": "Block",
              "src": "18920:425:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3241,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3237,
                            "src": "18951:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 3242,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inAwaitingWithdrawalProof",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3532,
                          "src": "18951:28:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                          }
                        },
                        "id": 3243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18951:30:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f742063757272656e746c79206177616974696e67206120726564656d7074696f6e2070726f6f66",
                        "id": 3244,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18995:43:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_45abe220509141867c1d364709ee82f771277a19a82d486d123671306d9de8a0",
                          "typeString": "literal_string \"Not currently awaiting a redemption proof\""
                        },
                        "value": "Not currently awaiting a redemption proof"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_45abe220509141867c1d364709ee82f771277a19a82d486d123671306d9de8a0",
                          "typeString": "literal_string \"Not currently awaiting a redemption proof\""
                        }
                      ],
                      "id": 3240,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "18930:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18930:118:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3246,
                  "nodeType": "ExpressionStatement",
                  "src": "18930:118:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3257,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3248,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18350,
                            "src": "19079:5:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 3249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "19079:15:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3253,
                                  "name": "TBTCConstants",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6757,
                                  "src": "19163:13:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_TBTCConstants_$6757_$",
                                    "typeString": "type(library TBTCConstants)"
                                  }
                                },
                                "id": 3254,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getRedemptionProofTimeout",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6708,
                                "src": "19163:39:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_delegatecall_pure$__$returns$_t_uint256_$",
                                  "typeString": "function () pure returns (uint256)"
                                }
                              },
                              "id": 3255,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19163:41:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3250,
                                "name": "_d",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3237,
                                "src": "19113:2:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              },
                              "id": 3251,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "withdrawalRequestTime",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3876,
                              "src": "19113:24:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3252,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16749,
                            "src": "19113:28:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 3256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19113:109:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "19079:143:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50726f6f662074696d657220686173206e6f7420656c6170736564",
                        "id": 3258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19236:29:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ad65c417c8e940066291989d87aaf8cfd457eaeed89a6e51f9a0b5acabdc23cc",
                          "typeString": "literal_string \"Proof timer has not elapsed\""
                        },
                        "value": "Proof timer has not elapsed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ad65c417c8e940066291989d87aaf8cfd457eaeed89a6e51f9a0b5acabdc23cc",
                          "typeString": "literal_string \"Proof timer has not elapsed\""
                        }
                      ],
                      "id": 3247,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "19058:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19058:217:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3260,
                  "nodeType": "ExpressionStatement",
                  "src": "19058:217:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 3264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19305:5:5",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3261,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3237,
                        "src": "19285:2:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 3263,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startLiquidation",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1957,
                      "src": "19285:19:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bool)"
                      }
                    },
                    "id": 3265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19285:26:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3266,
                  "nodeType": "ExpressionStatement",
                  "src": "19285:26:5"
                }
              ]
            },
            "documentation": "@notice     Anyone may notify the contract that the signers have failed to produce a redemption proof.\n @dev        This is considered fraud, and is punished.\n @param  _d  Deposit storage pointer.",
            "id": 3268,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "notifyRedemptionProofTimedOut",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3238,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3237,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 3268,
                  "src": "18866:31:5",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3236,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "18866:20:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18865:33:5"
            },
            "returnParameters": {
              "id": 3239,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18920:0:5"
            },
            "scope": 3269,
            "src": "18827:518:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 3270,
        "src": "960:18387:5"
      }
    ],
    "src": "0:19348:5"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositRedemption.sol",
      "exportedSymbols": {
        "DepositRedemption": [
          3269
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.5",
            ".17"
          ]
        },
        "id": 2332,
        "name": "PragmaDirective",
        "src": "0:23:5"
      },
      {
        "attributes": {
          "SourceUnit": 13217,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
          "file": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2333,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2334,
        "name": "ImportDirective",
        "src": "25:74:5"
      },
      {
        "attributes": {
          "SourceUnit": 13433,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
          "file": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2335,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2336,
        "name": "ImportDirective",
        "src": "100:74:5"
      },
      {
        "attributes": {
          "SourceUnit": 14208,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
          "file": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2337,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2338,
        "name": "ImportDirective",
        "src": "175:80:5"
      },
      {
        "attributes": {
          "SourceUnit": 13825,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol",
          "file": "@summa-tx/bitcoin-spv-sol/contracts/CheckBitcoinSigs.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2339,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2340,
        "name": "ImportDirective",
        "src": "256:96:5"
      },
      {
        "attributes": {
          "SourceUnit": 18288,
          "absolutePath": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
          "file": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2341,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2342,
        "name": "ImportDirective",
        "src": "353:87:5"
      },
      {
        "attributes": {
          "SourceUnit": 16856,
          "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2343,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2344,
        "name": "ImportDirective",
        "src": "441:75:5"
      },
      {
        "attributes": {
          "SourceUnit": 11429,
          "absolutePath": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol",
          "file": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2345,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2346,
        "name": "ImportDirective",
        "src": "517:99:5"
      },
      {
        "attributes": {
          "SourceUnit": 5104,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol",
          "file": "./DepositUtils.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2347,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2348,
        "name": "ImportDirective",
        "src": "617:48:5"
      },
      {
        "attributes": {
          "SourceUnit": 3779,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositStates.sol",
          "file": "./DepositStates.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2349,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2350,
        "name": "ImportDirective",
        "src": "666:50:5"
      },
      {
        "attributes": {
          "SourceUnit": 5419,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/OutsourceDepositLogging.sol",
          "file": "./OutsourceDepositLogging.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2351,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2352,
        "name": "ImportDirective",
        "src": "717:70:5"
      },
      {
        "attributes": {
          "SourceUnit": 6758,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCConstants.sol",
          "file": "../system/TBTCConstants.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2353,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2354,
        "name": "ImportDirective",
        "src": "788:58:5"
      },
      {
        "attributes": {
          "SourceUnit": 8562,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
          "file": "../system/TBTCToken.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2355,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2356,
        "name": "ImportDirective",
        "src": "847:50:5"
      },
      {
        "attributes": {
          "SourceUnit": 2331,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositLiquidation.sol",
          "file": "./DepositLiquidation.sol",
          "scope": 3270,
          "symbolAliases": [
            {
              "foreign": 2357,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 2358,
        "name": "ImportDirective",
        "src": "898:60:5"
      },
      {
        "attributes": {
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            3269
          ],
          "name": "DepositRedemption",
          "scope": 3270
        },
        "children": [
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeMath",
                  "referencedDeclaration": 16855,
                  "type": "library SafeMath"
                },
                "id": 2359,
                "name": "UserDefinedTypeName",
                "src": "998:8:5"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 2360,
                "name": "ElementaryTypeName",
                "src": "1011:7:5"
              }
            ],
            "id": 2361,
            "name": "UsingForDirective",
            "src": "992:27:5"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "CheckBitcoinSigs",
                  "referencedDeclaration": 13824,
                  "type": "library CheckBitcoinSigs"
                },
                "id": 2362,
                "name": "UserDefinedTypeName",
                "src": "1030:16:5"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 2363,
                "name": "ElementaryTypeName",
                "src": "1051:5:5"
              }
            ],
            "id": 2364,
            "name": "UsingForDirective",
            "src": "1024:33:5"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "BytesLib",
                  "referencedDeclaration": 13432,
                  "type": "library BytesLib"
                },
                "id": 2365,
                "name": "UserDefinedTypeName",
                "src": "1068:8:5"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 2366,
                "name": "ElementaryTypeName",
                "src": "1081:5:5"
              }
            ],
            "id": 2367,
            "name": "UsingForDirective",
            "src": "1062:25:5"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "BTCUtils",
                  "referencedDeclaration": 13216,
                  "type": "library BTCUtils"
                },
                "id": 2368,
                "name": "UserDefinedTypeName",
                "src": "1098:8:5"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 2369,
                "name": "ElementaryTypeName",
                "src": "1111:5:5"
              }
            ],
            "id": 2370,
            "name": "UsingForDirective",
            "src": "1092:25:5"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ValidateSPV",
                  "referencedDeclaration": 14207,
                  "type": "library ValidateSPV"
                },
                "id": 2371,
                "name": "UserDefinedTypeName",
                "src": "1128:11:5"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 2372,
                "name": "ElementaryTypeName",
                "src": "1144:5:5"
              }
            ],
            "id": 2373,
            "name": "UsingForDirective",
            "src": "1122:28:5"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ValidateSPV",
                  "referencedDeclaration": 14207,
                  "type": "library ValidateSPV"
                },
                "id": 2374,
                "name": "UserDefinedTypeName",
                "src": "1161:11:5"
              },
              {
                "attributes": {
                  "name": "bytes32",
                  "type": "bytes32"
                },
                "id": 2375,
                "name": "ElementaryTypeName",
                "src": "1177:7:5"
              }
            ],
            "id": 2376,
            "name": "UsingForDirective",
            "src": "1155:30:5"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils",
                  "referencedDeclaration": 5103,
                  "type": "library DepositUtils"
                },
                "id": 2377,
                "name": "UserDefinedTypeName",
                "src": "1197:12:5"
              },
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils.Deposit",
                  "referencedDeclaration": 3893,
                  "type": "struct DepositUtils.Deposit"
                },
                "id": 2378,
                "name": "UserDefinedTypeName",
                "src": "1214:20:5"
              }
            ],
            "id": 2379,
            "name": "UsingForDirective",
            "src": "1191:44:5"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositStates",
                  "referencedDeclaration": 3778,
                  "type": "library DepositStates"
                },
                "id": 2380,
                "name": "UserDefinedTypeName",
                "src": "1246:13:5"
              },
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils.Deposit",
                  "referencedDeclaration": 3893,
                  "type": "struct DepositUtils.Deposit"
                },
                "id": 2381,
                "name": "UserDefinedTypeName",
                "src": "1264:20:5"
              }
            ],
            "id": 2382,
            "name": "UsingForDirective",
            "src": "1240:45:5"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositLiquidation",
                  "referencedDeclaration": 2330,
                  "type": "library DepositLiquidation"
                },
                "id": 2383,
                "name": "UserDefinedTypeName",
                "src": "1296:18:5"
              },
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils.Deposit",
                  "referencedDeclaration": 3893,
                  "type": "struct DepositUtils.Deposit"
                },
                "id": 2384,
                "name": "UserDefinedTypeName",
                "src": "1319:20:5"
              }
            ],
            "id": 2385,
            "name": "UsingForDirective",
            "src": "1290:50:5"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "OutsourceDepositLogging",
                  "referencedDeclaration": 5418,
                  "type": "library OutsourceDepositLogging"
                },
                "id": 2386,
                "name": "UserDefinedTypeName",
                "src": "1351:23:5"
              },
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils.Deposit",
                  "referencedDeclaration": 3893,
                  "type": "struct DepositUtils.Deposit"
                },
                "id": 2387,
                "name": "UserDefinedTypeName",
                "src": "1379:20:5"
              }
            ],
            "id": 2388,
            "name": "UsingForDirective",
            "src": "1345:55:5"
          },
          {
            "attributes": {
              "documentation": "@notice     Pushes signer fee to the Keep group by transferring it to the Keep address.\n @dev        Approves the keep contract, then expects it to call transferFrom.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "distributeSignerFee",
              "scope": 3269,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 2425,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 2389,
                        "name": "UserDefinedTypeName",
                        "src": "1617:20:5"
                      }
                    ],
                    "id": 2390,
                    "name": "VariableDeclaration",
                    "src": "1617:31:5"
                  }
                ],
                "id": 2391,
                "name": "ParameterList",
                "src": "1616:33:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2392,
                "name": "ParameterList",
                "src": "1659:0:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2394
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_keep",
                          "scope": 2424,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IBondedECDSAKeep",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IBondedECDSAKeep",
                              "referencedDeclaration": 11428,
                              "type": "contract IBondedECDSAKeep"
                            },
                            "id": 2393,
                            "name": "UserDefinedTypeName",
                            "src": "1669:16:5"
                          }
                        ],
                        "id": 2394,
                        "name": "VariableDeclaration",
                        "src": "1669:22:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract IBondedECDSAKeep",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11428,
                              "type": "type(contract IBondedECDSAKeep)",
                              "value": "IBondedECDSAKeep"
                            },
                            "id": 2395,
                            "name": "Identifier",
                            "src": "1694:16:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "keepAddress",
                              "referencedDeclaration": 3858,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2390,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2396,
                                "name": "Identifier",
                                "src": "1711:2:5"
                              }
                            ],
                            "id": 2397,
                            "name": "MemberAccess",
                            "src": "1711:14:5"
                          }
                        ],
                        "id": 2398,
                        "name": "FunctionCall",
                        "src": "1694:32:5"
                      }
                    ],
                    "id": 2399,
                    "name": "VariableDeclarationStatement",
                    "src": "1669:57:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "approve",
                              "referencedDeclaration": 17061,
                              "type": "function (address,uint256) external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "tbtcToken",
                                  "referencedDeclaration": 3830,
                                  "type": "contract TBTCToken"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2390,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2400,
                                    "name": "Identifier",
                                    "src": "1737:2:5"
                                  }
                                ],
                                "id": 2403,
                                "name": "MemberAccess",
                                "src": "1737:12:5"
                              }
                            ],
                            "id": 2404,
                            "name": "MemberAccess",
                            "src": "1737:20:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "keepAddress",
                              "referencedDeclaration": 3858,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2390,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2405,
                                "name": "Identifier",
                                "src": "1758:2:5"
                              }
                            ],
                            "id": 2406,
                            "name": "MemberAccess",
                            "src": "1758:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "signerFeeTbtc",
                                  "referencedDeclaration": 4372,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2390,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2407,
                                    "name": "Identifier",
                                    "src": "1774:2:5"
                                  }
                                ],
                                "id": 2408,
                                "name": "MemberAccess",
                                "src": "1774:16:5"
                              }
                            ],
                            "id": 2409,
                            "name": "FunctionCall",
                            "src": "1774:18:5"
                          }
                        ],
                        "id": 2410,
                        "name": "FunctionCall",
                        "src": "1737:56:5"
                      }
                    ],
                    "id": 2411,
                    "name": "ExpressionStatement",
                    "src": "1737:56:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "distributeERC20Reward",
                              "referencedDeclaration": 11403,
                              "type": "function (address,uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2394,
                                  "type": "contract IBondedECDSAKeep",
                                  "value": "_keep"
                                },
                                "id": 2412,
                                "name": "Identifier",
                                "src": "1803:5:5"
                              }
                            ],
                            "id": 2414,
                            "name": "MemberAccess",
                            "src": "1803:27:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_TBTCToken_$8561",
                                      "typeString": "contract TBTCToken"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 2415,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1831:7:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "tbtcToken",
                                  "referencedDeclaration": 3830,
                                  "type": "contract TBTCToken"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2390,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2416,
                                    "name": "Identifier",
                                    "src": "1839:2:5"
                                  }
                                ],
                                "id": 2417,
                                "name": "MemberAccess",
                                "src": "1839:12:5"
                              }
                            ],
                            "id": 2418,
                            "name": "FunctionCall",
                            "src": "1831:21:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "signerFeeTbtc",
                                  "referencedDeclaration": 4372,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2390,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2419,
                                    "name": "Identifier",
                                    "src": "1854:2:5"
                                  }
                                ],
                                "id": 2420,
                                "name": "MemberAccess",
                                "src": "1854:16:5"
                              }
                            ],
                            "id": 2421,
                            "name": "FunctionCall",
                            "src": "1854:18:5"
                          }
                        ],
                        "id": 2422,
                        "name": "FunctionCall",
                        "src": "1803:70:5"
                      }
                    ],
                    "id": 2423,
                    "name": "ExpressionStatement",
                    "src": "1803:70:5"
                  }
                ],
                "id": 2424,
                "name": "Block",
                "src": "1659:221:5"
              }
            ],
            "id": 2425,
            "name": "FunctionDefinition",
            "src": "1588:292:5"
          },
          {
            "attributes": {
              "documentation": "@notice Approves digest for signing by a keep.\n @dev Calls given keep to sign the digest. Records a current timestamp\n for given digest.\n @param _digest Digest to approve.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "approveDigest",
              "scope": 3269,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 2450,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 2426,
                        "name": "UserDefinedTypeName",
                        "src": "2110:20:5"
                      }
                    ],
                    "id": 2427,
                    "name": "VariableDeclaration",
                    "src": "2110:31:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_digest",
                      "scope": 2450,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 2428,
                        "name": "ElementaryTypeName",
                        "src": "2143:7:5"
                      }
                    ],
                    "id": 2429,
                    "name": "VariableDeclaration",
                    "src": "2143:15:5"
                  }
                ],
                "id": 2430,
                "name": "ParameterList",
                "src": "2109:50:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2431,
                "name": "ParameterList",
                "src": "2181:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sign",
                              "referencedDeclaration": 11393,
                              "type": "function (bytes32) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "contract IBondedECDSAKeep",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 11428,
                                      "type": "type(contract IBondedECDSAKeep)",
                                      "value": "IBondedECDSAKeep"
                                    },
                                    "id": 2432,
                                    "name": "Identifier",
                                    "src": "2191:16:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "keepAddress",
                                      "referencedDeclaration": 3858,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2427,
                                          "type": "struct DepositUtils.Deposit storage pointer",
                                          "value": "_d"
                                        },
                                        "id": 2433,
                                        "name": "Identifier",
                                        "src": "2208:2:5"
                                      }
                                    ],
                                    "id": 2434,
                                    "name": "MemberAccess",
                                    "src": "2208:14:5"
                                  }
                                ],
                                "id": 2435,
                                "name": "FunctionCall",
                                "src": "2191:32:5"
                              }
                            ],
                            "id": 2436,
                            "name": "MemberAccess",
                            "src": "2191:37:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2429,
                              "type": "bytes32",
                              "value": "_digest"
                            },
                            "id": 2437,
                            "name": "Identifier",
                            "src": "2229:7:5"
                          }
                        ],
                        "id": 2438,
                        "name": "FunctionCall",
                        "src": "2191:46:5"
                      }
                    ],
                    "id": 2439,
                    "name": "ExpressionStatement",
                    "src": "2191:46:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "approvedDigests",
                                  "referencedDeclaration": 3892,
                                  "type": "mapping(bytes32 => uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2427,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2440,
                                    "name": "Identifier",
                                    "src": "2248:2:5"
                                  }
                                ],
                                "id": 2443,
                                "name": "MemberAccess",
                                "src": "2248:18:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2429,
                                  "type": "bytes32",
                                  "value": "_digest"
                                },
                                "id": 2442,
                                "name": "Identifier",
                                "src": "2267:7:5"
                              }
                            ],
                            "id": 2444,
                            "name": "IndexAccess",
                            "src": "2248:27:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "timestamp",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18350,
                                  "type": "block",
                                  "value": "block"
                                },
                                "id": 2445,
                                "name": "Identifier",
                                "src": "2278:5:5"
                              }
                            ],
                            "id": 2446,
                            "name": "MemberAccess",
                            "src": "2278:15:5"
                          }
                        ],
                        "id": 2447,
                        "name": "Assignment",
                        "src": "2248:45:5"
                      }
                    ],
                    "id": 2448,
                    "name": "ExpressionStatement",
                    "src": "2248:45:5"
                  }
                ],
                "id": 2449,
                "name": "Block",
                "src": "2181:119:5"
              }
            ],
            "id": 2450,
            "name": "FunctionDefinition",
            "src": "2087:213:5"
          },
          {
            "attributes": {
              "documentation": "@notice Handles TBTC requirements for redemption.\n @dev Burns or transfers depending on term and supply-peg impact.\n      Once these transfers complete, the deposit balance should be\n      sufficient to pay out signer fees once the redemption transaction\n      is proven on the Bitcoin side.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "performRedemptionTbtcTransfers",
              "scope": 3269,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 2546,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 2451,
                        "name": "UserDefinedTypeName",
                        "src": "2674:20:5"
                      }
                    ],
                    "id": 2452,
                    "name": "VariableDeclaration",
                    "src": "2674:31:5"
                  }
                ],
                "id": 2453,
                "name": "ParameterList",
                "src": "2673:33:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2454,
                "name": "ParameterList",
                "src": "2728:0:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2456
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tdtHolder",
                          "scope": 2545,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 2455,
                            "name": "ElementaryTypeName",
                            "src": "2738:7:5"
                          }
                        ],
                        "id": 2456,
                        "name": "VariableDeclaration",
                        "src": "2738:17:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address payable",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "depositOwner",
                              "referencedDeclaration": 4604,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2452,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2457,
                                "name": "Identifier",
                                "src": "2758:2:5"
                              }
                            ],
                            "id": 2458,
                            "name": "MemberAccess",
                            "src": "2758:15:5"
                          }
                        ],
                        "id": 2459,
                        "name": "FunctionCall",
                        "src": "2758:17:5"
                      }
                    ],
                    "id": 2460,
                    "name": "VariableDeclarationStatement",
                    "src": "2738:37:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2462
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "frtHolder",
                          "scope": 2545,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 2461,
                            "name": "ElementaryTypeName",
                            "src": "2785:7:5"
                          }
                        ],
                        "id": 2462,
                        "name": "VariableDeclaration",
                        "src": "2785:17:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address payable",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "feeRebateTokenHolder",
                              "referencedDeclaration": 4582,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2452,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2463,
                                "name": "Identifier",
                                "src": "2805:2:5"
                              }
                            ],
                            "id": 2464,
                            "name": "MemberAccess",
                            "src": "2805:23:5"
                          }
                        ],
                        "id": 2465,
                        "name": "FunctionCall",
                        "src": "2805:25:5"
                      }
                    ],
                    "id": 2466,
                    "name": "VariableDeclarationStatement",
                    "src": "2785:45:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2468
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "vendingMachineAddress",
                          "scope": 2545,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 2467,
                            "name": "ElementaryTypeName",
                            "src": "2840:7:5"
                          }
                        ],
                        "id": 2468,
                        "name": "VariableDeclaration",
                        "src": "2840:29:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "vendingMachineAddress",
                          "referencedDeclaration": 3836,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2452,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 2469,
                            "name": "Identifier",
                            "src": "2872:2:5"
                          }
                        ],
                        "id": 2470,
                        "name": "MemberAccess",
                        "src": "2872:24:5"
                      }
                    ],
                    "id": 2471,
                    "name": "VariableDeclarationStatement",
                    "src": "2840:56:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2473,
                        2475,
                        2477
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tbtcOwedToDeposit",
                          "scope": 2545,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2472,
                            "name": "ElementaryTypeName",
                            "src": "2921:7:5"
                          }
                        ],
                        "id": 2473,
                        "name": "VariableDeclaration",
                        "src": "2921:25:5"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tbtcOwedToTdtHolder",
                          "scope": 2545,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2474,
                            "name": "ElementaryTypeName",
                            "src": "2960:7:5"
                          }
                        ],
                        "id": 2475,
                        "name": "VariableDeclaration",
                        "src": "2960:27:5"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tbtcOwedToFrtHolder",
                          "scope": 2545,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2476,
                            "name": "ElementaryTypeName",
                            "src": "3001:7:5"
                          }
                        ],
                        "id": 2477,
                        "name": "VariableDeclaration",
                        "src": "3001:27:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple(uint256,uint256,uint256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "calculateRedemptionTbtcAmounts",
                              "referencedDeclaration": 5032,
                              "type": "function (struct DepositUtils.Deposit storage pointer,address,bool) view returns (uint256,uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2452,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2478,
                                "name": "Identifier",
                                "src": "3041:2:5"
                              }
                            ],
                            "id": 2479,
                            "name": "MemberAccess",
                            "src": "3041:33:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "redeemerAddress",
                              "referencedDeclaration": 3868,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2452,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2480,
                                "name": "Identifier",
                                "src": "3075:2:5"
                              }
                            ],
                            "id": 2481,
                            "name": "MemberAccess",
                            "src": "3075:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "66616c7365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "false"
                            },
                            "id": 2482,
                            "name": "Literal",
                            "src": "3095:5:5"
                          }
                        ],
                        "id": 2483,
                        "name": "FunctionCall",
                        "src": "3041:60:5"
                      }
                    ],
                    "id": 2484,
                    "name": "VariableDeclarationStatement",
                    "src": "2907:194:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2473,
                              "type": "uint256",
                              "value": "tbtcOwedToDeposit"
                            },
                            "id": 2485,
                            "name": "Identifier",
                            "src": "3116:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 2486,
                            "name": "Literal",
                            "src": "3136:1:5"
                          }
                        ],
                        "id": 2487,
                        "name": "BinaryOperation",
                        "src": "3116:21:5"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "transferFrom",
                                      "referencedDeclaration": 17096,
                                      "type": "function (address,address,uint256) external returns (bool)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "tbtcToken",
                                          "referencedDeclaration": 3830,
                                          "type": "contract TBTCToken"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2452,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 2488,
                                            "name": "Identifier",
                                            "src": "3153:2:5"
                                          }
                                        ],
                                        "id": 2491,
                                        "name": "MemberAccess",
                                        "src": "3153:12:5"
                                      }
                                    ],
                                    "id": 2492,
                                    "name": "MemberAccess",
                                    "src": "3153:25:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "sender",
                                      "referencedDeclaration": null,
                                      "type": "address payable"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18360,
                                          "type": "msg",
                                          "value": "msg"
                                        },
                                        "id": 2493,
                                        "name": "Identifier",
                                        "src": "3196:3:5"
                                      }
                                    ],
                                    "id": 2494,
                                    "name": "MemberAccess",
                                    "src": "3196:10:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "address",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_DepositRedemption_$3269",
                                              "typeString": "library DepositRedemption"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)",
                                          "value": "address"
                                        },
                                        "id": 2495,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "3224:7:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18442,
                                          "type": "library DepositRedemption",
                                          "value": "this"
                                        },
                                        "id": 2496,
                                        "name": "Identifier",
                                        "src": "3232:4:5"
                                      }
                                    ],
                                    "id": 2497,
                                    "name": "FunctionCall",
                                    "src": "3224:13:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2473,
                                      "type": "uint256",
                                      "value": "tbtcOwedToDeposit"
                                    },
                                    "id": 2498,
                                    "name": "Identifier",
                                    "src": "3255:17:5"
                                  }
                                ],
                                "id": 2499,
                                "name": "FunctionCall",
                                "src": "3153:133:5"
                              }
                            ],
                            "id": 2500,
                            "name": "ExpressionStatement",
                            "src": "3153:133:5"
                          }
                        ],
                        "id": 2501,
                        "name": "Block",
                        "src": "3139:158:5"
                      }
                    ],
                    "id": 2502,
                    "name": "IfStatement",
                    "src": "3112:185:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2475,
                              "type": "uint256",
                              "value": "tbtcOwedToTdtHolder"
                            },
                            "id": 2503,
                            "name": "Identifier",
                            "src": "3310:19:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 2504,
                            "name": "Literal",
                            "src": "3332:1:5"
                          }
                        ],
                        "id": 2505,
                        "name": "BinaryOperation",
                        "src": "3310:23:5"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2456,
                                      "type": "address",
                                      "value": "tdtHolder"
                                    },
                                    "id": 2506,
                                    "name": "Identifier",
                                    "src": "3353:9:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2468,
                                      "type": "address",
                                      "value": "vendingMachineAddress"
                                    },
                                    "id": 2507,
                                    "name": "Identifier",
                                    "src": "3366:21:5"
                                  }
                                ],
                                "id": 2508,
                                "name": "BinaryOperation",
                                "src": "3353:34:5"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "tuple()",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "burn",
                                              "referencedDeclaration": 8524,
                                              "type": "function (uint256) external"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "tbtcToken",
                                                  "referencedDeclaration": 3830,
                                                  "type": "contract TBTCToken"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2452,
                                                      "type": "struct DepositUtils.Deposit storage pointer",
                                                      "value": "_d"
                                                    },
                                                    "id": 2509,
                                                    "name": "Identifier",
                                                    "src": "3407:2:5"
                                                  }
                                                ],
                                                "id": 2512,
                                                "name": "MemberAccess",
                                                "src": "3407:12:5"
                                              }
                                            ],
                                            "id": 2513,
                                            "name": "MemberAccess",
                                            "src": "3407:17:5"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2475,
                                              "type": "uint256",
                                              "value": "tbtcOwedToTdtHolder"
                                            },
                                            "id": 2514,
                                            "name": "Identifier",
                                            "src": "3425:19:5"
                                          }
                                        ],
                                        "id": 2515,
                                        "name": "FunctionCall",
                                        "src": "3407:38:5"
                                      }
                                    ],
                                    "id": 2516,
                                    "name": "ExpressionStatement",
                                    "src": "3407:38:5"
                                  }
                                ],
                                "id": 2517,
                                "name": "Block",
                                "src": "3389:71:5"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bool",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "transfer",
                                              "referencedDeclaration": 17026,
                                              "type": "function (address,uint256) external returns (bool)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "tbtcToken",
                                                  "referencedDeclaration": 3830,
                                                  "type": "contract TBTCToken"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2452,
                                                      "type": "struct DepositUtils.Deposit storage pointer",
                                                      "value": "_d"
                                                    },
                                                    "id": 2518,
                                                    "name": "Identifier",
                                                    "src": "3484:2:5"
                                                  }
                                                ],
                                                "id": 2521,
                                                "name": "MemberAccess",
                                                "src": "3484:12:5"
                                              }
                                            ],
                                            "id": 2522,
                                            "name": "MemberAccess",
                                            "src": "3484:21:5"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2456,
                                              "type": "address",
                                              "value": "tdtHolder"
                                            },
                                            "id": 2523,
                                            "name": "Identifier",
                                            "src": "3506:9:5"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2475,
                                              "type": "uint256",
                                              "value": "tbtcOwedToTdtHolder"
                                            },
                                            "id": 2524,
                                            "name": "Identifier",
                                            "src": "3517:19:5"
                                          }
                                        ],
                                        "id": 2525,
                                        "name": "FunctionCall",
                                        "src": "3484:53:5"
                                      }
                                    ],
                                    "id": 2526,
                                    "name": "ExpressionStatement",
                                    "src": "3484:53:5"
                                  }
                                ],
                                "id": 2527,
                                "name": "Block",
                                "src": "3466:86:5"
                              }
                            ],
                            "id": 2528,
                            "name": "IfStatement",
                            "src": "3349:203:5"
                          }
                        ],
                        "id": 2529,
                        "name": "Block",
                        "src": "3335:227:5"
                      }
                    ],
                    "id": 2530,
                    "name": "IfStatement",
                    "src": "3306:256:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2477,
                              "type": "uint256",
                              "value": "tbtcOwedToFrtHolder"
                            },
                            "id": 2531,
                            "name": "Identifier",
                            "src": "3575:19:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 2532,
                            "name": "Literal",
                            "src": "3597:1:5"
                          }
                        ],
                        "id": 2533,
                        "name": "BinaryOperation",
                        "src": "3575:23:5"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "transfer",
                                      "referencedDeclaration": 17026,
                                      "type": "function (address,uint256) external returns (bool)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "tbtcToken",
                                          "referencedDeclaration": 3830,
                                          "type": "contract TBTCToken"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2452,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 2534,
                                            "name": "Identifier",
                                            "src": "3614:2:5"
                                          }
                                        ],
                                        "id": 2537,
                                        "name": "MemberAccess",
                                        "src": "3614:12:5"
                                      }
                                    ],
                                    "id": 2538,
                                    "name": "MemberAccess",
                                    "src": "3614:21:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2462,
                                      "type": "address",
                                      "value": "frtHolder"
                                    },
                                    "id": 2539,
                                    "name": "Identifier",
                                    "src": "3636:9:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2477,
                                      "type": "uint256",
                                      "value": "tbtcOwedToFrtHolder"
                                    },
                                    "id": 2540,
                                    "name": "Identifier",
                                    "src": "3647:19:5"
                                  }
                                ],
                                "id": 2541,
                                "name": "FunctionCall",
                                "src": "3614:53:5"
                              }
                            ],
                            "id": 2542,
                            "name": "ExpressionStatement",
                            "src": "3614:53:5"
                          }
                        ],
                        "id": 2543,
                        "name": "Block",
                        "src": "3600:78:5"
                      }
                    ],
                    "id": 2544,
                    "name": "IfStatement",
                    "src": "3571:107:5"
                  }
                ],
                "id": 2545,
                "name": "Block",
                "src": "2728:956:5"
              }
            ],
            "id": 2546,
            "name": "FunctionDefinition",
            "src": "2634:1050:5"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_requestRedemption",
              "scope": 3269,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 2703,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 2547,
                        "name": "UserDefinedTypeName",
                        "src": "3727:20:5"
                      }
                    ],
                    "id": 2548,
                    "name": "VariableDeclaration",
                    "src": "3727:31:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outputValueBytes",
                      "scope": 2703,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 2549,
                        "name": "ElementaryTypeName",
                        "src": "3768:6:5"
                      }
                    ],
                    "id": 2550,
                    "name": "VariableDeclaration",
                    "src": "3768:24:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemerOutputScript",
                      "scope": 2703,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 2551,
                        "name": "ElementaryTypeName",
                        "src": "3802:5:5"
                      }
                    ],
                    "id": 2552,
                    "name": "VariableDeclaration",
                    "src": "3802:34:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemer",
                      "scope": 2703,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address payable",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "payable",
                          "type": "address payable"
                        },
                        "id": 2553,
                        "name": "ElementaryTypeName",
                        "src": "3846:15:5"
                      }
                    ],
                    "id": 2554,
                    "name": "VariableDeclaration",
                    "src": "3846:25:5"
                  }
                ],
                "id": 2555,
                "name": "ParameterList",
                "src": "3717:160:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2556,
                "name": "ParameterList",
                "src": "3887:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_fb7310ec49208474ec344af8f7bbd8f891ba2e4e3b54611db3223bff951b6065",
                                  "typeString": "literal_string \"Redemption only available from Active or Courtesy state\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2557,
                            "name": "Identifier",
                            "src": "3897:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "inRedeemableState",
                                  "referencedDeclaration": 3419,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2548,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2558,
                                    "name": "Identifier",
                                    "src": "3918:2:5"
                                  }
                                ],
                                "id": 2559,
                                "name": "MemberAccess",
                                "src": "3918:20:5"
                              }
                            ],
                            "id": 2560,
                            "name": "FunctionCall",
                            "src": "3918:22:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "526564656d7074696f6e206f6e6c7920617661696c61626c652066726f6d20416374697665206f7220436f757274657379207374617465",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Redemption only available from Active or Courtesy state\"",
                              "value": "Redemption only available from Active or Courtesy state"
                            },
                            "id": 2561,
                            "name": "Literal",
                            "src": "3954:57:5"
                          }
                        ],
                        "id": 2562,
                        "name": "FunctionCall",
                        "src": "3897:124:5"
                      }
                    ],
                    "id": 2563,
                    "name": "ExpressionStatement",
                    "src": "3897:124:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2565
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_output",
                          "scope": 2702,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 2564,
                            "name": "ElementaryTypeName",
                            "src": "4031:5:5"
                          }
                        ],
                        "id": 2565,
                        "name": "VariableDeclaration",
                        "src": "4031:20:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "encodePacked",
                              "referencedDeclaration": null,
                              "type": "function () pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18347,
                                  "type": "abi",
                                  "value": "abi"
                                },
                                "id": 2566,
                                "name": "Identifier",
                                "src": "4066:3:5"
                              }
                            ],
                            "id": 2567,
                            "name": "MemberAccess",
                            "src": "4066:16:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2550,
                              "type": "bytes8",
                              "value": "_outputValueBytes"
                            },
                            "id": 2568,
                            "name": "Identifier",
                            "src": "4083:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2552,
                              "type": "bytes memory",
                              "value": "_redeemerOutputScript"
                            },
                            "id": 2569,
                            "name": "Identifier",
                            "src": "4102:21:5"
                          }
                        ],
                        "id": 2570,
                        "name": "FunctionCall",
                        "src": "4066:58:5"
                      }
                    ],
                    "id": 2571,
                    "name": "VariableDeclarationStatement",
                    "src": "4031:93:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_1895c7d64bc4fc39f1ab63358f3c866164529d2cf46b23fa7d93fe7342d95ade",
                                  "typeString": "literal_string \"Output script must be a standard type\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2572,
                            "name": "Identifier",
                            "src": "4134:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "extractHash",
                                          "referencedDeclaration": 12682,
                                          "type": "function (bytes memory) pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2565,
                                              "type": "bytes memory",
                                              "value": "_output"
                                            },
                                            "id": 2573,
                                            "name": "Identifier",
                                            "src": "4155:7:5"
                                          }
                                        ],
                                        "id": 2574,
                                        "name": "MemberAccess",
                                        "src": "4155:19:5"
                                      }
                                    ],
                                    "id": 2575,
                                    "name": "FunctionCall",
                                    "src": "4155:21:5"
                                  }
                                ],
                                "id": 2576,
                                "name": "MemberAccess",
                                "src": "4155:28:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 2577,
                                "name": "Literal",
                                "src": "4186:1:5"
                              }
                            ],
                            "id": 2578,
                            "name": "BinaryOperation",
                            "src": "4155:32:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4f757470757420736372697074206d7573742062652061207374616e646172642074797065",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Output script must be a standard type\"",
                              "value": "Output script must be a standard type"
                            },
                            "id": 2579,
                            "name": "Literal",
                            "src": "4201:39:5"
                          }
                        ],
                        "id": 2580,
                        "name": "FunctionCall",
                        "src": "4134:116:5"
                      }
                    ],
                    "id": 2581,
                    "name": "ExpressionStatement",
                    "src": "4134:116:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address payable"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "redeemerAddress",
                              "referencedDeclaration": 3868,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2548,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2582,
                                "name": "Identifier",
                                "src": "4341:2:5"
                              }
                            ],
                            "id": 2584,
                            "name": "MemberAccess",
                            "src": "4341:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2554,
                              "type": "address payable",
                              "value": "_redeemer"
                            },
                            "id": 2585,
                            "name": "Identifier",
                            "src": "4362:9:5"
                          }
                        ],
                        "id": 2586,
                        "name": "Assignment",
                        "src": "4341:30:5"
                      }
                    ],
                    "id": 2587,
                    "name": "ExpressionStatement",
                    "src": "4341:30:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2546,
                              "type": "function (struct DepositUtils.Deposit storage pointer)",
                              "value": "performRedemptionTbtcTransfers"
                            },
                            "id": 2588,
                            "name": "Identifier",
                            "src": "4382:30:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2548,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 2589,
                            "name": "Identifier",
                            "src": "4413:2:5"
                          }
                        ],
                        "id": 2590,
                        "name": "FunctionCall",
                        "src": "4382:34:5"
                      }
                    ],
                    "id": 2591,
                    "name": "ExpressionStatement",
                    "src": "4382:34:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2593
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_outputValue",
                          "scope": 2702,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2592,
                            "name": "ElementaryTypeName",
                            "src": "4476:7:5"
                          }
                        ],
                        "id": 2593,
                        "name": "VariableDeclaration",
                        "src": "4476:20:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "bytesToUint",
                              "referencedDeclaration": 11790,
                              "type": "function (bytes memory) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "reverseEndianness",
                                      "referencedDeclaration": 11643,
                                      "type": "function (bytes memory) pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes8",
                                                  "typeString": "bytes8"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "member_name": "encodePacked",
                                              "referencedDeclaration": null,
                                              "type": "function () pure returns (bytes memory)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 18347,
                                                  "type": "abi",
                                                  "value": "abi"
                                                },
                                                "id": 2594,
                                                "name": "Identifier",
                                                "src": "4511:3:5"
                                              }
                                            ],
                                            "id": 2595,
                                            "name": "MemberAccess",
                                            "src": "4511:33:5"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2550,
                                              "type": "bytes8",
                                              "value": "_outputValueBytes"
                                            },
                                            "id": 2596,
                                            "name": "Identifier",
                                            "src": "4545:17:5"
                                          }
                                        ],
                                        "id": 2597,
                                        "name": "FunctionCall",
                                        "src": "4511:52:5"
                                      }
                                    ],
                                    "id": 2598,
                                    "name": "MemberAccess",
                                    "src": "4511:87:5"
                                  }
                                ],
                                "id": 2599,
                                "name": "FunctionCall",
                                "src": "4511:89:5"
                              }
                            ],
                            "id": 2600,
                            "name": "MemberAccess",
                            "src": "4511:118:5"
                          }
                        ],
                        "id": 2601,
                        "name": "FunctionCall",
                        "src": "4511:120:5"
                      }
                    ],
                    "id": 2602,
                    "name": "VariableDeclarationStatement",
                    "src": "4476:155:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2604
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_requestedFee",
                          "scope": 2702,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2603,
                            "name": "ElementaryTypeName",
                            "src": "4641:7:5"
                          }
                        ],
                        "id": 2604,
                        "name": "VariableDeclaration",
                        "src": "4641:21:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sub",
                              "referencedDeclaration": 16774,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "utxoValue",
                                      "referencedDeclaration": 4471,
                                      "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2548,
                                          "type": "struct DepositUtils.Deposit storage pointer",
                                          "value": "_d"
                                        },
                                        "id": 2605,
                                        "name": "Identifier",
                                        "src": "4665:2:5"
                                      }
                                    ],
                                    "id": 2606,
                                    "name": "MemberAccess",
                                    "src": "4665:12:5"
                                  }
                                ],
                                "id": 2607,
                                "name": "FunctionCall",
                                "src": "4665:14:5"
                              }
                            ],
                            "id": 2608,
                            "name": "MemberAccess",
                            "src": "4665:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2593,
                              "type": "uint256",
                              "value": "_outputValue"
                            },
                            "id": 2609,
                            "name": "Identifier",
                            "src": "4684:12:5"
                          }
                        ],
                        "id": 2610,
                        "name": "FunctionCall",
                        "src": "4665:32:5"
                      }
                    ],
                    "id": 2611,
                    "name": "VariableDeclarationStatement",
                    "src": "4641:56:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_1a1caf81adfff16cf867c4b0a5b4b78e7cd04e7043ab702dbe34d63ba4f8282e",
                                  "typeString": "literal_string \"Fee is too low\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2612,
                            "name": "Identifier",
                            "src": "4708:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2604,
                                  "type": "uint256",
                                  "value": "_requestedFee"
                                },
                                "id": 2613,
                                "name": "Identifier",
                                "src": "4729:13:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "getMinimumRedemptionFee",
                                      "referencedDeclaration": 6716,
                                      "type": "function () pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 6757,
                                          "type": "type(library TBTCConstants)",
                                          "value": "TBTCConstants"
                                        },
                                        "id": 2614,
                                        "name": "Identifier",
                                        "src": "4746:13:5"
                                      }
                                    ],
                                    "id": 2615,
                                    "name": "MemberAccess",
                                    "src": "4746:37:5"
                                  }
                                ],
                                "id": 2616,
                                "name": "FunctionCall",
                                "src": "4746:39:5"
                              }
                            ],
                            "id": 2617,
                            "name": "BinaryOperation",
                            "src": "4729:56:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "46656520697320746f6f206c6f77",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Fee is too low\"",
                              "value": "Fee is too low"
                            },
                            "id": 2618,
                            "name": "Literal",
                            "src": "4799:16:5"
                          }
                        ],
                        "id": 2619,
                        "name": "FunctionCall",
                        "src": "4708:117:5"
                      }
                    ],
                    "id": 2620,
                    "name": "ExpressionStatement",
                    "src": "4708:117:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_9c0f3fb6ab2ce728d1b538b22ab625a223b2516e2a6717cd2f9b58c70df32913",
                                  "typeString": "literal_string \"Initial fee cannot exceed half of the deposit's value\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2621,
                            "name": "Identifier",
                            "src": "4835:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2604,
                                  "type": "uint256",
                                  "value": "_requestedFee"
                                },
                                "id": 2622,
                                "name": "Identifier",
                                "src": "4856:13:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "/",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "utxoValue",
                                          "referencedDeclaration": 4471,
                                          "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2548,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 2623,
                                            "name": "Identifier",
                                            "src": "4872:2:5"
                                          }
                                        ],
                                        "id": 2624,
                                        "name": "MemberAccess",
                                        "src": "4872:12:5"
                                      }
                                    ],
                                    "id": 2625,
                                    "name": "FunctionCall",
                                    "src": "4872:14:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "32",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 2",
                                      "value": "2"
                                    },
                                    "id": 2626,
                                    "name": "Literal",
                                    "src": "4889:1:5"
                                  }
                                ],
                                "id": 2627,
                                "name": "BinaryOperation",
                                "src": "4872:18:5"
                              }
                            ],
                            "id": 2628,
                            "name": "BinaryOperation",
                            "src": "4856:34:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "496e697469616c206665652063616e6e6f74206578636565642068616c66206f6620746865206465706f73697427732076616c7565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Initial fee cannot exceed half of the deposit's value\"",
                              "value": "Initial fee cannot exceed half of the deposit's value"
                            },
                            "id": 2629,
                            "name": "Literal",
                            "src": "4904:55:5"
                          }
                        ],
                        "id": 2630,
                        "name": "FunctionCall",
                        "src": "4835:134:5"
                      }
                    ],
                    "id": 2631,
                    "name": "ExpressionStatement",
                    "src": "4835:134:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2633
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_sighash",
                          "scope": 2702,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 2632,
                            "name": "ElementaryTypeName",
                            "src": "5013:7:5"
                          }
                        ],
                        "id": 2633,
                        "name": "VariableDeclaration",
                        "src": "5013:16:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_storage",
                                  "typeString": "bytes storage ref"
                                },
                                {
                                  "typeIdentifier": "t_bytes20",
                                  "typeString": "bytes20"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "wpkhSpendSighash",
                              "referencedDeclaration": 13771,
                              "type": "function (bytes memory,bytes20,bytes8,bytes8,bytes memory) pure returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13824,
                                  "type": "type(library CheckBitcoinSigs)",
                                  "value": "CheckBitcoinSigs"
                                },
                                "id": 2634,
                                "name": "Identifier",
                                "src": "5044:16:5"
                              }
                            ],
                            "id": 2635,
                            "name": "MemberAccess",
                            "src": "5044:33:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoOutpoint",
                              "referencedDeclaration": 3884,
                              "type": "bytes storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2548,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2636,
                                "name": "Identifier",
                                "src": "5095:2:5"
                              }
                            ],
                            "id": 2637,
                            "name": "MemberAccess",
                            "src": "5095:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes20",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "signerPKH",
                                  "referencedDeclaration": 4458,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes20)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2548,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2638,
                                    "name": "Identifier",
                                    "src": "5128:2:5"
                                  }
                                ],
                                "id": 2639,
                                "name": "MemberAccess",
                                "src": "5128:12:5"
                              }
                            ],
                            "id": 2640,
                            "name": "FunctionCall",
                            "src": "5128:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoValueBytes",
                              "referencedDeclaration": 3880,
                              "type": "bytes8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2548,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2641,
                                "name": "Identifier",
                                "src": "5160:2:5"
                              }
                            ],
                            "id": 2642,
                            "name": "MemberAccess",
                            "src": "5160:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2550,
                              "type": "bytes8",
                              "value": "_outputValueBytes"
                            },
                            "id": 2643,
                            "name": "Identifier",
                            "src": "5195:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2552,
                              "type": "bytes memory",
                              "value": "_redeemerOutputScript"
                            },
                            "id": 2644,
                            "name": "Identifier",
                            "src": "5230:21:5"
                          }
                        ],
                        "id": 2645,
                        "name": "FunctionCall",
                        "src": "5044:221:5"
                      }
                    ],
                    "id": 2646,
                    "name": "VariableDeclarationStatement",
                    "src": "5013:252:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "redeemerOutputScript",
                              "referencedDeclaration": 3870,
                              "type": "bytes storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2548,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2647,
                                "name": "Identifier",
                                "src": "5313:2:5"
                              }
                            ],
                            "id": 2649,
                            "name": "MemberAccess",
                            "src": "5313:23:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2552,
                              "type": "bytes memory",
                              "value": "_redeemerOutputScript"
                            },
                            "id": 2650,
                            "name": "Identifier",
                            "src": "5339:21:5"
                          }
                        ],
                        "id": 2651,
                        "name": "Assignment",
                        "src": "5313:47:5"
                      }
                    ],
                    "id": 2652,
                    "name": "ExpressionStatement",
                    "src": "5313:47:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "initialRedemptionFee",
                              "referencedDeclaration": 3872,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2548,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2653,
                                "name": "Identifier",
                                "src": "5370:2:5"
                              }
                            ],
                            "id": 2655,
                            "name": "MemberAccess",
                            "src": "5370:23:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2604,
                              "type": "uint256",
                              "value": "_requestedFee"
                            },
                            "id": 2656,
                            "name": "Identifier",
                            "src": "5396:13:5"
                          }
                        ],
                        "id": 2657,
                        "name": "Assignment",
                        "src": "5370:39:5"
                      }
                    ],
                    "id": 2658,
                    "name": "ExpressionStatement",
                    "src": "5370:39:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "latestRedemptionFee",
                              "referencedDeclaration": 3874,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2548,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2659,
                                "name": "Identifier",
                                "src": "5419:2:5"
                              }
                            ],
                            "id": 2661,
                            "name": "MemberAccess",
                            "src": "5419:22:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2604,
                              "type": "uint256",
                              "value": "_requestedFee"
                            },
                            "id": 2662,
                            "name": "Identifier",
                            "src": "5444:13:5"
                          }
                        ],
                        "id": 2663,
                        "name": "Assignment",
                        "src": "5419:38:5"
                      }
                    ],
                    "id": 2664,
                    "name": "ExpressionStatement",
                    "src": "5419:38:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "withdrawalRequestTime",
                              "referencedDeclaration": 3876,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2548,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2665,
                                "name": "Identifier",
                                "src": "5467:2:5"
                              }
                            ],
                            "id": 2667,
                            "name": "MemberAccess",
                            "src": "5467:24:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "timestamp",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18350,
                                  "type": "block",
                                  "value": "block"
                                },
                                "id": 2668,
                                "name": "Identifier",
                                "src": "5494:5:5"
                              }
                            ],
                            "id": 2669,
                            "name": "MemberAccess",
                            "src": "5494:15:5"
                          }
                        ],
                        "id": 2670,
                        "name": "Assignment",
                        "src": "5467:42:5"
                      }
                    ],
                    "id": 2671,
                    "name": "ExpressionStatement",
                    "src": "5467:42:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "lastRequestedDigest",
                              "referencedDeclaration": 3878,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2548,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2672,
                                "name": "Identifier",
                                "src": "5519:2:5"
                              }
                            ],
                            "id": 2674,
                            "name": "MemberAccess",
                            "src": "5519:22:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2633,
                              "type": "bytes32",
                              "value": "_sighash"
                            },
                            "id": 2675,
                            "name": "Identifier",
                            "src": "5544:8:5"
                          }
                        ],
                        "id": 2676,
                        "name": "Assignment",
                        "src": "5519:33:5"
                      }
                    ],
                    "id": 2677,
                    "name": "ExpressionStatement",
                    "src": "5519:33:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2450,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes32)",
                              "value": "approveDigest"
                            },
                            "id": 2678,
                            "name": "Identifier",
                            "src": "5563:13:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2548,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 2679,
                            "name": "Identifier",
                            "src": "5577:2:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2633,
                              "type": "bytes32",
                              "value": "_sighash"
                            },
                            "id": 2680,
                            "name": "Identifier",
                            "src": "5581:8:5"
                          }
                        ],
                        "id": 2681,
                        "name": "FunctionCall",
                        "src": "5563:27:5"
                      }
                    ],
                    "id": 2682,
                    "name": "ExpressionStatement",
                    "src": "5563:27:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "setAwaitingWithdrawalSignature",
                              "referencedDeclaration": 3687,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2548,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2683,
                                "name": "Identifier",
                                "src": "5601:2:5"
                              }
                            ],
                            "id": 2685,
                            "name": "MemberAccess",
                            "src": "5601:33:5"
                          }
                        ],
                        "id": 2686,
                        "name": "FunctionCall",
                        "src": "5601:35:5"
                      }
                    ],
                    "id": 2687,
                    "name": "ExpressionStatement",
                    "src": "5601:35:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_storage",
                                  "typeString": "bytes storage ref"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "logRedemptionRequested",
                              "referencedDeclaration": 5170,
                              "type": "function (struct DepositUtils.Deposit storage pointer,address,bytes32,uint256,bytes memory,uint256,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2548,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2688,
                                "name": "Identifier",
                                "src": "5646:2:5"
                              }
                            ],
                            "id": 2690,
                            "name": "MemberAccess",
                            "src": "5646:25:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2554,
                              "type": "address payable",
                              "value": "_redeemer"
                            },
                            "id": 2691,
                            "name": "Identifier",
                            "src": "5685:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2633,
                              "type": "bytes32",
                              "value": "_sighash"
                            },
                            "id": 2692,
                            "name": "Identifier",
                            "src": "5708:8:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "utxoValue",
                                  "referencedDeclaration": 4471,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2548,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2693,
                                    "name": "Identifier",
                                    "src": "5730:2:5"
                                  }
                                ],
                                "id": 2694,
                                "name": "MemberAccess",
                                "src": "5730:12:5"
                              }
                            ],
                            "id": 2695,
                            "name": "FunctionCall",
                            "src": "5730:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2552,
                              "type": "bytes memory",
                              "value": "_redeemerOutputScript"
                            },
                            "id": 2696,
                            "name": "Identifier",
                            "src": "5758:21:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2604,
                              "type": "uint256",
                              "value": "_requestedFee"
                            },
                            "id": 2697,
                            "name": "Identifier",
                            "src": "5793:13:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoOutpoint",
                              "referencedDeclaration": 3884,
                              "type": "bytes storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2548,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2698,
                                "name": "Identifier",
                                "src": "5820:2:5"
                              }
                            ],
                            "id": 2699,
                            "name": "MemberAccess",
                            "src": "5820:15:5"
                          }
                        ],
                        "id": 2700,
                        "name": "FunctionCall",
                        "src": "5646:199:5"
                      }
                    ],
                    "id": 2701,
                    "name": "ExpressionStatement",
                    "src": "5646:199:5"
                  }
                ],
                "id": 2702,
                "name": "Block",
                "src": "3887:1965:5"
              }
            ],
            "id": 2703,
            "name": "FunctionDefinition",
            "src": "3690:2162:5"
          },
          {
            "attributes": {
              "documentation": "@notice                     Anyone can request redemption as long as they can.\n                             approve the TDT transfer to the final recipient.\n @dev                        The redeemer specifies details about the Bitcoin redemption tx and pays for the redemption\n                             on behalf of _finalRecipient.\n @param  _d                  Deposit storage pointer.\n @param  _outputValueBytes   The 8-byte LE output size.\n @param  _redeemerOutputScript The redeemer's length-prefixed output script.\n @param  _finalRecipient     The address to receive the TDT and later be recorded as deposit redeemer.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "transferAndRequestRedemption",
              "scope": 3269,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 2737,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 2704,
                        "name": "UserDefinedTypeName",
                        "src": "6588:20:5"
                      }
                    ],
                    "id": 2705,
                    "name": "VariableDeclaration",
                    "src": "6588:31:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outputValueBytes",
                      "scope": 2737,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 2706,
                        "name": "ElementaryTypeName",
                        "src": "6629:6:5"
                      }
                    ],
                    "id": 2707,
                    "name": "VariableDeclaration",
                    "src": "6629:24:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemerOutputScript",
                      "scope": 2737,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 2708,
                        "name": "ElementaryTypeName",
                        "src": "6663:5:5"
                      }
                    ],
                    "id": 2709,
                    "name": "VariableDeclaration",
                    "src": "6663:34:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_finalRecipient",
                      "scope": 2737,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address payable",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "payable",
                          "type": "address payable"
                        },
                        "id": 2710,
                        "name": "ElementaryTypeName",
                        "src": "6707:15:5"
                      }
                    ],
                    "id": 2711,
                    "name": "VariableDeclaration",
                    "src": "6707:31:5"
                  }
                ],
                "id": 2712,
                "name": "ParameterList",
                "src": "6578:166:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2713,
                "name": "ParameterList",
                "src": "6752:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "transferFrom",
                              "referencedDeclaration": 18245,
                              "type": "function (address,address,uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "tbtcDepositToken",
                                  "referencedDeclaration": 3832,
                                  "type": "contract IERC721"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2705,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2714,
                                    "name": "Identifier",
                                    "src": "6819:2:5"
                                  }
                                ],
                                "id": 2717,
                                "name": "MemberAccess",
                                "src": "6819:19:5"
                              }
                            ],
                            "id": 2718,
                            "name": "MemberAccess",
                            "src": "6819:32:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18360,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 2719,
                                "name": "Identifier",
                                "src": "6865:3:5"
                              }
                            ],
                            "id": 2720,
                            "name": "MemberAccess",
                            "src": "6865:10:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2711,
                              "type": "address payable",
                              "value": "_finalRecipient"
                            },
                            "id": 2721,
                            "name": "Identifier",
                            "src": "6889:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)",
                                  "value": "uint256"
                                },
                                "id": 2722,
                                "name": "ElementaryTypeNameExpression",
                                "src": "6918:7:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_DepositRedemption_$3269",
                                          "typeString": "library DepositRedemption"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 2723,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "6926:7:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18442,
                                      "type": "library DepositRedemption",
                                      "value": "this"
                                    },
                                    "id": 2724,
                                    "name": "Identifier",
                                    "src": "6934:4:5"
                                  }
                                ],
                                "id": 2725,
                                "name": "FunctionCall",
                                "src": "6926:13:5"
                              }
                            ],
                            "id": 2726,
                            "name": "FunctionCall",
                            "src": "6918:22:5"
                          }
                        ],
                        "id": 2727,
                        "name": "FunctionCall",
                        "src": "6819:131:5"
                      }
                    ],
                    "id": 2728,
                    "name": "ExpressionStatement",
                    "src": "6819:131:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2703,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes memory,address payable)",
                              "value": "_requestRedemption"
                            },
                            "id": 2729,
                            "name": "Identifier",
                            "src": "6961:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2705,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 2730,
                            "name": "Identifier",
                            "src": "6993:2:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2707,
                              "type": "bytes8",
                              "value": "_outputValueBytes"
                            },
                            "id": 2731,
                            "name": "Identifier",
                            "src": "7009:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2709,
                              "type": "bytes memory",
                              "value": "_redeemerOutputScript"
                            },
                            "id": 2732,
                            "name": "Identifier",
                            "src": "7040:21:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2711,
                              "type": "address payable",
                              "value": "_finalRecipient"
                            },
                            "id": 2733,
                            "name": "Identifier",
                            "src": "7075:15:5"
                          }
                        ],
                        "id": 2734,
                        "name": "FunctionCall",
                        "src": "6961:139:5"
                      }
                    ],
                    "id": 2735,
                    "name": "ExpressionStatement",
                    "src": "6961:139:5"
                  }
                ],
                "id": 2736,
                "name": "Block",
                "src": "6752:355:5"
              }
            ],
            "id": 2737,
            "name": "FunctionDefinition",
            "src": "6541:566:5"
          },
          {
            "attributes": {
              "documentation": "@notice                     Only TDT holder can request redemption,\n                             unless Deposit is expired or in COURTESY_CALL.\n @dev                        The redeemer specifies details about the Bitcoin redemption transaction.\n @param  _d                  Deposit storage pointer.\n @param  _outputValueBytes   The 8-byte LE output size.\n @param  _redeemerOutputScript The redeemer's length-prefixed output script.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "requestRedemption",
              "scope": 3269,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 2755,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 2738,
                        "name": "UserDefinedTypeName",
                        "src": "7625:20:5"
                      }
                    ],
                    "id": 2739,
                    "name": "VariableDeclaration",
                    "src": "7625:31:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_outputValueBytes",
                      "scope": 2755,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 2740,
                        "name": "ElementaryTypeName",
                        "src": "7666:6:5"
                      }
                    ],
                    "id": 2741,
                    "name": "VariableDeclaration",
                    "src": "7666:24:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemerOutputScript",
                      "scope": 2755,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 2742,
                        "name": "ElementaryTypeName",
                        "src": "7700:5:5"
                      }
                    ],
                    "id": 2743,
                    "name": "VariableDeclaration",
                    "src": "7700:34:5"
                  }
                ],
                "id": 2744,
                "name": "ParameterList",
                "src": "7615:125:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2745,
                "name": "ParameterList",
                "src": "7748:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2703,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes memory,address payable)",
                              "value": "_requestRedemption"
                            },
                            "id": 2746,
                            "name": "Identifier",
                            "src": "7815:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2739,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 2747,
                            "name": "Identifier",
                            "src": "7847:2:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2741,
                              "type": "bytes8",
                              "value": "_outputValueBytes"
                            },
                            "id": 2748,
                            "name": "Identifier",
                            "src": "7863:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2743,
                              "type": "bytes memory",
                              "value": "_redeemerOutputScript"
                            },
                            "id": 2749,
                            "name": "Identifier",
                            "src": "7894:21:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18360,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 2750,
                                "name": "Identifier",
                                "src": "7929:3:5"
                              }
                            ],
                            "id": 2751,
                            "name": "MemberAccess",
                            "src": "7929:10:5"
                          }
                        ],
                        "id": 2752,
                        "name": "FunctionCall",
                        "src": "7815:134:5"
                      }
                    ],
                    "id": 2753,
                    "name": "ExpressionStatement",
                    "src": "7815:134:5"
                  }
                ],
                "id": 2754,
                "name": "Block",
                "src": "7748:208:5"
              }
            ],
            "id": 2755,
            "name": "FunctionDefinition",
            "src": "7589:367:5"
          },
          {
            "attributes": {
              "documentation": "@notice     Anyone may provide a withdrawal signature if it was requested.\n @dev        The signers will be penalized if this (or provideRedemptionProof) is not called.\n @param  _d  Deposit storage pointer.\n @param  _v  Signature recovery value.\n @param  _r  Signature R value.\n @param  _s  Signature S value. Should be in the low half of secp256k1 curve's order.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "provideRedemptionSignature",
              "scope": 3269,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 2811,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 2756,
                        "name": "UserDefinedTypeName",
                        "src": "8414:20:5"
                      }
                    ],
                    "id": 2757,
                    "name": "VariableDeclaration",
                    "src": "8414:31:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_v",
                      "scope": 2811,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 2758,
                        "name": "ElementaryTypeName",
                        "src": "8455:5:5"
                      }
                    ],
                    "id": 2759,
                    "name": "VariableDeclaration",
                    "src": "8455:8:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_r",
                      "scope": 2811,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 2760,
                        "name": "ElementaryTypeName",
                        "src": "8473:7:5"
                      }
                    ],
                    "id": 2761,
                    "name": "VariableDeclaration",
                    "src": "8473:10:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_s",
                      "scope": 2811,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 2762,
                        "name": "ElementaryTypeName",
                        "src": "8493:7:5"
                      }
                    ],
                    "id": 2763,
                    "name": "VariableDeclaration",
                    "src": "8493:10:5"
                  }
                ],
                "id": 2764,
                "name": "ParameterList",
                "src": "8404:105:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2765,
                "name": "ParameterList",
                "src": "8519:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_7f1554af04c7494845f652eef1b9c0205d41f382eeafa05cc3b4d8b6c1803e50",
                                  "typeString": "literal_string \"Not currently awaiting a signature\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2766,
                            "name": "Identifier",
                            "src": "8529:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "inAwaitingWithdrawalSignature",
                                  "referencedDeclaration": 3516,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2757,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2767,
                                    "name": "Identifier",
                                    "src": "8550:2:5"
                                  }
                                ],
                                "id": 2768,
                                "name": "MemberAccess",
                                "src": "8550:32:5"
                              }
                            ],
                            "id": 2769,
                            "name": "FunctionCall",
                            "src": "8550:34:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4e6f742063757272656e746c79206177616974696e672061207369676e6174757265",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Not currently awaiting a signature\"",
                              "value": "Not currently awaiting a signature"
                            },
                            "id": 2770,
                            "name": "Literal",
                            "src": "8598:36:5"
                          }
                        ],
                        "id": 2771,
                        "name": "FunctionCall",
                        "src": "8529:115:5"
                      }
                    ],
                    "id": 2772,
                    "name": "ExpressionStatement",
                    "src": "8529:115:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_c3d0b8f14749d133bb624c3b8bae877765b25d6c61c3b704bc39bab3fd16d0d5",
                                  "typeString": "literal_string \"Malleable signature - s should be in the low half of secp256k1 curve's order\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2773,
                            "name": "Identifier",
                            "src": "9099:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)",
                                      "value": "uint256"
                                    },
                                    "id": 2774,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "9120:7:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2763,
                                      "type": "bytes32",
                                      "value": "_s"
                                    },
                                    "id": 2775,
                                    "name": "Identifier",
                                    "src": "9128:2:5"
                                  }
                                ],
                                "id": 2776,
                                "name": "FunctionCall",
                                "src": "9120:11:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 5789...(69 digits omitted)...7168",
                                  "value": "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"
                                },
                                "id": 2777,
                                "name": "Literal",
                                "src": "9151:66:5"
                              }
                            ],
                            "id": 2778,
                            "name": "BinaryOperation",
                            "src": "9120:97:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d616c6c6561626c65207369676e6174757265202d20732073686f756c6420626520696e20746865206c6f772068616c66206f6620736563703235366b312063757276652773206f72646572",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Malleable signature - s should be in the low half of secp256k1 curve's order\"",
                              "value": "Malleable signature - s should be in the low half of secp256k1 curve's order"
                            },
                            "id": 2779,
                            "name": "Literal",
                            "src": "9231:78:5"
                          }
                        ],
                        "id": 2780,
                        "name": "FunctionCall",
                        "src": "9099:220:5"
                      }
                    ],
                    "id": 2781,
                    "name": "ExpressionStatement",
                    "src": "9099:220:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_4f2d7dfcb27c0aafa13ae8c400de482c7832204d194018b6e45bd2bf244c74e7",
                                  "typeString": "literal_string \"Invalid signature\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2782,
                            "name": "Identifier",
                            "src": "9383:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "checkSig",
                                  "referencedDeclaration": 13626,
                                  "type": "function (bytes memory,bytes32,uint8,bytes32,bytes32) pure returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "signerPubkey",
                                          "referencedDeclaration": 4428,
                                          "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2757,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 2783,
                                            "name": "Identifier",
                                            "src": "9404:2:5"
                                          }
                                        ],
                                        "id": 2784,
                                        "name": "MemberAccess",
                                        "src": "9404:15:5"
                                      }
                                    ],
                                    "id": 2785,
                                    "name": "FunctionCall",
                                    "src": "9404:17:5"
                                  }
                                ],
                                "id": 2786,
                                "name": "MemberAccess",
                                "src": "9404:26:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "lastRequestedDigest",
                                  "referencedDeclaration": 3878,
                                  "type": "bytes32"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2757,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2787,
                                    "name": "Identifier",
                                    "src": "9431:2:5"
                                  }
                                ],
                                "id": 2788,
                                "name": "MemberAccess",
                                "src": "9431:22:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2759,
                                  "type": "uint8",
                                  "value": "_v"
                                },
                                "id": 2789,
                                "name": "Identifier",
                                "src": "9455:2:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2761,
                                  "type": "bytes32",
                                  "value": "_r"
                                },
                                "id": 2790,
                                "name": "Identifier",
                                "src": "9459:2:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2763,
                                  "type": "bytes32",
                                  "value": "_s"
                                },
                                "id": 2791,
                                "name": "Identifier",
                                "src": "9463:2:5"
                              }
                            ],
                            "id": 2792,
                            "name": "FunctionCall",
                            "src": "9404:62:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "496e76616c6964207369676e6174757265",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Invalid signature\"",
                              "value": "Invalid signature"
                            },
                            "id": 2793,
                            "name": "Literal",
                            "src": "9480:19:5"
                          }
                        ],
                        "id": 2794,
                        "name": "FunctionCall",
                        "src": "9383:126:5"
                      }
                    ],
                    "id": 2795,
                    "name": "ExpressionStatement",
                    "src": "9383:126:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "setAwaitingWithdrawalProof",
                              "referencedDeclaration": 3702,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2757,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2796,
                                "name": "Identifier",
                                "src": "9601:2:5"
                              }
                            ],
                            "id": 2798,
                            "name": "MemberAccess",
                            "src": "9601:29:5"
                          }
                        ],
                        "id": 2799,
                        "name": "FunctionCall",
                        "src": "9601:31:5"
                      }
                    ],
                    "id": 2800,
                    "name": "ExpressionStatement",
                    "src": "9601:31:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "logGotRedemptionSignature",
                              "referencedDeclaration": 5199,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes32,bytes32,bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2757,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2801,
                                "name": "Identifier",
                                "src": "9642:2:5"
                              }
                            ],
                            "id": 2803,
                            "name": "MemberAccess",
                            "src": "9642:28:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "lastRequestedDigest",
                              "referencedDeclaration": 3878,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2757,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2804,
                                "name": "Identifier",
                                "src": "9671:2:5"
                              }
                            ],
                            "id": 2805,
                            "name": "MemberAccess",
                            "src": "9671:22:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2761,
                              "type": "bytes32",
                              "value": "_r"
                            },
                            "id": 2806,
                            "name": "Identifier",
                            "src": "9695:2:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2763,
                              "type": "bytes32",
                              "value": "_s"
                            },
                            "id": 2807,
                            "name": "Identifier",
                            "src": "9699:2:5"
                          }
                        ],
                        "id": 2808,
                        "name": "FunctionCall",
                        "src": "9642:60:5"
                      }
                    ],
                    "id": 2809,
                    "name": "ExpressionStatement",
                    "src": "9642:60:5"
                  }
                ],
                "id": 2810,
                "name": "Block",
                "src": "8519:1190:5"
              }
            ],
            "id": 2811,
            "name": "FunctionDefinition",
            "src": "8369:1340:5"
          },
          {
            "attributes": {
              "documentation": "@notice                             Anyone may notify the contract that a fee bump is needed.\n @dev                                This sends us back to AWAITING_WITHDRAWAL_SIGNATURE.\n @param  _d                          Deposit storage pointer.\n @param  _previousOutputValueBytes   The previous output's value.\n @param  _newOutputValueBytes        The new output's value.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "increaseRedemptionFee",
              "scope": 3269,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 2930,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 2812,
                        "name": "UserDefinedTypeName",
                        "src": "10164:20:5"
                      }
                    ],
                    "id": 2813,
                    "name": "VariableDeclaration",
                    "src": "10164:31:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_previousOutputValueBytes",
                      "scope": 2930,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 2814,
                        "name": "ElementaryTypeName",
                        "src": "10205:6:5"
                      }
                    ],
                    "id": 2815,
                    "name": "VariableDeclaration",
                    "src": "10205:32:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_newOutputValueBytes",
                      "scope": 2930,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 2816,
                        "name": "ElementaryTypeName",
                        "src": "10247:6:5"
                      }
                    ],
                    "id": 2817,
                    "name": "VariableDeclaration",
                    "src": "10247:27:5"
                  }
                ],
                "id": 2818,
                "name": "ParameterList",
                "src": "10154:126:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2819,
                "name": "ParameterList",
                "src": "10288:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_7f9ebedad8dc3a9a9126be78859ee9786dae9a4bb98ff498149b89effa1dd4b9",
                                  "typeString": "literal_string \"Fee increase only available after signature provided\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2820,
                            "name": "Identifier",
                            "src": "10298:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "inAwaitingWithdrawalProof",
                                  "referencedDeclaration": 3532,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2813,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2821,
                                    "name": "Identifier",
                                    "src": "10319:2:5"
                                  }
                                ],
                                "id": 2822,
                                "name": "MemberAccess",
                                "src": "10319:28:5"
                              }
                            ],
                            "id": 2823,
                            "name": "FunctionCall",
                            "src": "10319:30:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "46656520696e637265617365206f6e6c7920617661696c61626c65206166746572207369676e61747572652070726f7669646564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Fee increase only available after signature provided\"",
                              "value": "Fee increase only available after signature provided"
                            },
                            "id": 2824,
                            "name": "Literal",
                            "src": "10363:54:5"
                          }
                        ],
                        "id": 2825,
                        "name": "FunctionCall",
                        "src": "10298:129:5"
                      }
                    ],
                    "id": 2826,
                    "name": "ExpressionStatement",
                    "src": "10298:129:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_34b61a836d5fefbaea10023b58b98f8d103beaa28d26249237d27c54fea12ecf",
                                  "typeString": "literal_string \"Fee increase not yet permitted\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2827,
                            "name": "Identifier",
                            "src": "10437:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "timestamp",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18350,
                                      "type": "block",
                                      "value": "block"
                                    },
                                    "id": 2828,
                                    "name": "Identifier",
                                    "src": "10458:5:5"
                                  }
                                ],
                                "id": 2829,
                                "name": "MemberAccess",
                                "src": "10458:15:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "add",
                                      "referencedDeclaration": 16749,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "withdrawalRequestTime",
                                          "referencedDeclaration": 3876,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2813,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 2830,
                                            "name": "Identifier",
                                            "src": "10493:2:5"
                                          }
                                        ],
                                        "id": 2831,
                                        "name": "MemberAccess",
                                        "src": "10493:24:5"
                                      }
                                    ],
                                    "id": 2832,
                                    "name": "MemberAccess",
                                    "src": "10493:28:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "getIncreaseFeeTimer",
                                          "referencedDeclaration": 6700,
                                          "type": "function () pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 6757,
                                              "type": "type(library TBTCConstants)",
                                              "value": "TBTCConstants"
                                            },
                                            "id": 2833,
                                            "name": "Identifier",
                                            "src": "10543:13:5"
                                          }
                                        ],
                                        "id": 2834,
                                        "name": "MemberAccess",
                                        "src": "10543:33:5"
                                      }
                                    ],
                                    "id": 2835,
                                    "name": "FunctionCall",
                                    "src": "10543:35:5"
                                  }
                                ],
                                "id": 2836,
                                "name": "FunctionCall",
                                "src": "10493:103:5"
                              }
                            ],
                            "id": 2837,
                            "name": "BinaryOperation",
                            "src": "10458:138:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "46656520696e637265617365206e6f7420796574207065726d6974746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Fee increase not yet permitted\"",
                              "value": "Fee increase not yet permitted"
                            },
                            "id": 2838,
                            "name": "Literal",
                            "src": "10610:32:5"
                          }
                        ],
                        "id": 2839,
                        "name": "FunctionCall",
                        "src": "10437:215:5"
                      }
                    ],
                    "id": 2840,
                    "name": "ExpressionStatement",
                    "src": "10437:215:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2842
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_newOutputValue",
                          "scope": 2929,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2841,
                            "name": "ElementaryTypeName",
                            "src": "10663:7:5"
                          }
                        ],
                        "id": 2842,
                        "name": "VariableDeclaration",
                        "src": "10663:23:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2994,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes8,bytes8) view returns (uint256)",
                              "value": "checkRelationshipToPrevious"
                            },
                            "id": 2843,
                            "name": "Identifier",
                            "src": "10701:27:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2813,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 2844,
                            "name": "Identifier",
                            "src": "10746:2:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2815,
                              "type": "bytes8",
                              "value": "_previousOutputValueBytes"
                            },
                            "id": 2845,
                            "name": "Identifier",
                            "src": "10766:25:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2817,
                              "type": "bytes8",
                              "value": "_newOutputValueBytes"
                            },
                            "id": 2846,
                            "name": "Identifier",
                            "src": "10809:20:5"
                          }
                        ],
                        "id": 2847,
                        "name": "FunctionCall",
                        "src": "10701:142:5"
                      }
                    ],
                    "id": 2848,
                    "name": "VariableDeclarationStatement",
                    "src": "10663:180:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2842,
                              "type": "uint256",
                              "value": "_newOutputValue"
                            },
                            "id": 2849,
                            "name": "Identifier",
                            "src": "11058:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getMinimumUtxoValue",
                                  "referencedDeclaration": 6724,
                                  "type": "function () pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6757,
                                      "type": "type(library TBTCConstants)",
                                      "value": "TBTCConstants"
                                    },
                                    "id": 2850,
                                    "name": "Identifier",
                                    "src": "11076:13:5"
                                  }
                                ],
                                "id": 2851,
                                "name": "MemberAccess",
                                "src": "11076:33:5"
                              }
                            ],
                            "id": 2852,
                            "name": "FunctionCall",
                            "src": "11076:35:5"
                          }
                        ],
                        "id": 2853,
                        "name": "BinaryOperation",
                        "src": "11058:53:5"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2842,
                                      "type": "uint256",
                                      "value": "_newOutputValue"
                                    },
                                    "id": 2854,
                                    "name": "Identifier",
                                    "src": "11127:15:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "getMinimumUtxoValue",
                                          "referencedDeclaration": 6724,
                                          "type": "function () pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 6757,
                                              "type": "type(library TBTCConstants)",
                                              "value": "TBTCConstants"
                                            },
                                            "id": 2855,
                                            "name": "Identifier",
                                            "src": "11145:13:5"
                                          }
                                        ],
                                        "id": 2856,
                                        "name": "MemberAccess",
                                        "src": "11145:33:5"
                                      }
                                    ],
                                    "id": 2857,
                                    "name": "FunctionCall",
                                    "src": "11145:35:5"
                                  }
                                ],
                                "id": 2858,
                                "name": "Assignment",
                                "src": "11127:53:5"
                              }
                            ],
                            "id": 2859,
                            "name": "ExpressionStatement",
                            "src": "11127:53:5"
                          }
                        ],
                        "id": 2860,
                        "name": "Block",
                        "src": "11113:78:5"
                      }
                    ],
                    "id": 2861,
                    "name": "IfStatement",
                    "src": "11054:137:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "latestRedemptionFee",
                              "referencedDeclaration": 3874,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2813,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2862,
                                "name": "Identifier",
                                "src": "11201:2:5"
                              }
                            ],
                            "id": 2864,
                            "name": "MemberAccess",
                            "src": "11201:22:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sub",
                                  "referencedDeclaration": 16774,
                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "utxoValue",
                                          "referencedDeclaration": 4471,
                                          "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2813,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 2865,
                                            "name": "Identifier",
                                            "src": "11226:2:5"
                                          }
                                        ],
                                        "id": 2866,
                                        "name": "MemberAccess",
                                        "src": "11226:12:5"
                                      }
                                    ],
                                    "id": 2867,
                                    "name": "FunctionCall",
                                    "src": "11226:14:5"
                                  }
                                ],
                                "id": 2868,
                                "name": "MemberAccess",
                                "src": "11226:18:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2842,
                                  "type": "uint256",
                                  "value": "_newOutputValue"
                                },
                                "id": 2869,
                                "name": "Identifier",
                                "src": "11245:15:5"
                              }
                            ],
                            "id": 2870,
                            "name": "FunctionCall",
                            "src": "11226:35:5"
                          }
                        ],
                        "id": 2871,
                        "name": "Assignment",
                        "src": "11201:60:5"
                      }
                    ],
                    "id": 2872,
                    "name": "ExpressionStatement",
                    "src": "11201:60:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2874
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_sighash",
                          "scope": 2929,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 2873,
                            "name": "ElementaryTypeName",
                            "src": "11310:7:5"
                          }
                        ],
                        "id": 2874,
                        "name": "VariableDeclaration",
                        "src": "11310:16:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_storage",
                                  "typeString": "bytes storage ref"
                                },
                                {
                                  "typeIdentifier": "t_bytes20",
                                  "typeString": "bytes20"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_storage",
                                  "typeString": "bytes storage ref"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "wpkhSpendSighash",
                              "referencedDeclaration": 13771,
                              "type": "function (bytes memory,bytes20,bytes8,bytes8,bytes memory) pure returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13824,
                                  "type": "type(library CheckBitcoinSigs)",
                                  "value": "CheckBitcoinSigs"
                                },
                                "id": 2875,
                                "name": "Identifier",
                                "src": "11341:16:5"
                              }
                            ],
                            "id": 2876,
                            "name": "MemberAccess",
                            "src": "11341:33:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoOutpoint",
                              "referencedDeclaration": 3884,
                              "type": "bytes storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2813,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2877,
                                "name": "Identifier",
                                "src": "11392:2:5"
                              }
                            ],
                            "id": 2878,
                            "name": "MemberAccess",
                            "src": "11392:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes20",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "signerPKH",
                                  "referencedDeclaration": 4458,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes20)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2813,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2879,
                                    "name": "Identifier",
                                    "src": "11425:2:5"
                                  }
                                ],
                                "id": 2880,
                                "name": "MemberAccess",
                                "src": "11425:12:5"
                              }
                            ],
                            "id": 2881,
                            "name": "FunctionCall",
                            "src": "11425:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoValueBytes",
                              "referencedDeclaration": 3880,
                              "type": "bytes8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2813,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2882,
                                "name": "Identifier",
                                "src": "11457:2:5"
                              }
                            ],
                            "id": 2883,
                            "name": "MemberAccess",
                            "src": "11457:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2817,
                              "type": "bytes8",
                              "value": "_newOutputValueBytes"
                            },
                            "id": 2884,
                            "name": "Identifier",
                            "src": "11492:20:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "redeemerOutputScript",
                              "referencedDeclaration": 3870,
                              "type": "bytes storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2813,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2885,
                                "name": "Identifier",
                                "src": "11530:2:5"
                              }
                            ],
                            "id": 2886,
                            "name": "MemberAccess",
                            "src": "11530:23:5"
                          }
                        ],
                        "id": 2887,
                        "name": "FunctionCall",
                        "src": "11341:226:5"
                      }
                    ],
                    "id": 2888,
                    "name": "VariableDeclarationStatement",
                    "src": "11310:257:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "withdrawalRequestTime",
                              "referencedDeclaration": 3876,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2813,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2889,
                                "name": "Identifier",
                                "src": "11641:2:5"
                              }
                            ],
                            "id": 2891,
                            "name": "MemberAccess",
                            "src": "11641:24:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "timestamp",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18350,
                                  "type": "block",
                                  "value": "block"
                                },
                                "id": 2892,
                                "name": "Identifier",
                                "src": "11668:5:5"
                              }
                            ],
                            "id": 2893,
                            "name": "MemberAccess",
                            "src": "11668:15:5"
                          }
                        ],
                        "id": 2894,
                        "name": "Assignment",
                        "src": "11641:42:5"
                      }
                    ],
                    "id": 2895,
                    "name": "ExpressionStatement",
                    "src": "11641:42:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "lastRequestedDigest",
                              "referencedDeclaration": 3878,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2813,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2896,
                                "name": "Identifier",
                                "src": "11693:2:5"
                              }
                            ],
                            "id": 2898,
                            "name": "MemberAccess",
                            "src": "11693:22:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2874,
                              "type": "bytes32",
                              "value": "_sighash"
                            },
                            "id": 2899,
                            "name": "Identifier",
                            "src": "11718:8:5"
                          }
                        ],
                        "id": 2900,
                        "name": "Assignment",
                        "src": "11693:33:5"
                      }
                    ],
                    "id": 2901,
                    "name": "ExpressionStatement",
                    "src": "11693:33:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2450,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes32)",
                              "value": "approveDigest"
                            },
                            "id": 2902,
                            "name": "Identifier",
                            "src": "11737:13:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2813,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 2903,
                            "name": "Identifier",
                            "src": "11751:2:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2874,
                              "type": "bytes32",
                              "value": "_sighash"
                            },
                            "id": 2904,
                            "name": "Identifier",
                            "src": "11755:8:5"
                          }
                        ],
                        "id": 2905,
                        "name": "FunctionCall",
                        "src": "11737:27:5"
                      }
                    ],
                    "id": 2906,
                    "name": "ExpressionStatement",
                    "src": "11737:27:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "setAwaitingWithdrawalSignature",
                              "referencedDeclaration": 3687,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2813,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2907,
                                "name": "Identifier",
                                "src": "11821:2:5"
                              }
                            ],
                            "id": 2909,
                            "name": "MemberAccess",
                            "src": "11821:33:5"
                          }
                        ],
                        "id": 2910,
                        "name": "FunctionCall",
                        "src": "11821:35:5"
                      }
                    ],
                    "id": 2911,
                    "name": "ExpressionStatement",
                    "src": "11821:35:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_storage",
                                  "typeString": "bytes storage ref"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_storage",
                                  "typeString": "bytes storage ref"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "logRedemptionRequested",
                              "referencedDeclaration": 5170,
                              "type": "function (struct DepositUtils.Deposit storage pointer,address,bytes32,uint256,bytes memory,uint256,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2813,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2912,
                                "name": "Identifier",
                                "src": "11866:2:5"
                              }
                            ],
                            "id": 2914,
                            "name": "MemberAccess",
                            "src": "11866:25:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18360,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 2915,
                                "name": "Identifier",
                                "src": "11905:3:5"
                              }
                            ],
                            "id": 2916,
                            "name": "MemberAccess",
                            "src": "11905:10:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2874,
                              "type": "bytes32",
                              "value": "_sighash"
                            },
                            "id": 2917,
                            "name": "Identifier",
                            "src": "11929:8:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "utxoValue",
                                  "referencedDeclaration": 4471,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2813,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2918,
                                    "name": "Identifier",
                                    "src": "11951:2:5"
                                  }
                                ],
                                "id": 2919,
                                "name": "MemberAccess",
                                "src": "11951:12:5"
                              }
                            ],
                            "id": 2920,
                            "name": "FunctionCall",
                            "src": "11951:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "redeemerOutputScript",
                              "referencedDeclaration": 3870,
                              "type": "bytes storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2813,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2921,
                                "name": "Identifier",
                                "src": "11979:2:5"
                              }
                            ],
                            "id": 2922,
                            "name": "MemberAccess",
                            "src": "11979:23:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "latestRedemptionFee",
                              "referencedDeclaration": 3874,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2813,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2923,
                                "name": "Identifier",
                                "src": "12016:2:5"
                              }
                            ],
                            "id": 2924,
                            "name": "MemberAccess",
                            "src": "12016:22:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoOutpoint",
                              "referencedDeclaration": 3884,
                              "type": "bytes storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2813,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2925,
                                "name": "Identifier",
                                "src": "12052:2:5"
                              }
                            ],
                            "id": 2926,
                            "name": "MemberAccess",
                            "src": "12052:15:5"
                          }
                        ],
                        "id": 2927,
                        "name": "FunctionCall",
                        "src": "11866:211:5"
                      }
                    ],
                    "id": 2928,
                    "name": "ExpressionStatement",
                    "src": "11866:211:5"
                  }
                ],
                "id": 2929,
                "name": "Block",
                "src": "10288:1796:5"
              }
            ],
            "id": 2930,
            "name": "FunctionDefinition",
            "src": "10124:1960:5"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "checkRelationshipToPrevious",
              "scope": 3269,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 2994,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 2931,
                        "name": "UserDefinedTypeName",
                        "src": "12136:20:5"
                      }
                    ],
                    "id": 2932,
                    "name": "VariableDeclaration",
                    "src": "12136:31:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_previousOutputValueBytes",
                      "scope": 2994,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 2933,
                        "name": "ElementaryTypeName",
                        "src": "12177:6:5"
                      }
                    ],
                    "id": 2934,
                    "name": "VariableDeclaration",
                    "src": "12177:32:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_newOutputValueBytes",
                      "scope": 2994,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 2935,
                        "name": "ElementaryTypeName",
                        "src": "12219:6:5"
                      }
                    ],
                    "id": 2936,
                    "name": "VariableDeclaration",
                    "src": "12219:27:5"
                  }
                ],
                "id": 2937,
                "name": "ParameterList",
                "src": "12126:126:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_newOutputValue",
                      "scope": 2994,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2938,
                        "name": "ElementaryTypeName",
                        "src": "12274:7:5"
                      }
                    ],
                    "id": 2939,
                    "name": "VariableDeclaration",
                    "src": "12274:23:5"
                  }
                ],
                "id": 2940,
                "name": "ParameterList",
                "src": "12273:25:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2942
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_previousOutputValue",
                          "scope": 2993,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2941,
                            "name": "ElementaryTypeName",
                            "src": "12396:7:5"
                          }
                        ],
                        "id": 2942,
                        "name": "VariableDeclaration",
                        "src": "12396:28:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "bytes8LEToUint",
                              "referencedDeclaration": 4520,
                              "type": "function (bytes8) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5103,
                                  "type": "type(library DepositUtils)",
                                  "value": "DepositUtils"
                                },
                                "id": 2943,
                                "name": "Identifier",
                                "src": "12439:12:5"
                              }
                            ],
                            "id": 2944,
                            "name": "MemberAccess",
                            "src": "12439:27:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2934,
                              "type": "bytes8",
                              "value": "_previousOutputValueBytes"
                            },
                            "id": 2945,
                            "name": "Identifier",
                            "src": "12467:25:5"
                          }
                        ],
                        "id": 2946,
                        "name": "FunctionCall",
                        "src": "12439:54:5"
                      }
                    ],
                    "id": 2947,
                    "name": "VariableDeclarationStatement",
                    "src": "12396:97:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2939,
                              "type": "uint256",
                              "value": "_newOutputValue"
                            },
                            "id": 2948,
                            "name": "Identifier",
                            "src": "12503:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes8",
                                      "typeString": "bytes8"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "bytes8LEToUint",
                                  "referencedDeclaration": 4520,
                                  "type": "function (bytes8) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5103,
                                      "type": "type(library DepositUtils)",
                                      "value": "DepositUtils"
                                    },
                                    "id": 2949,
                                    "name": "Identifier",
                                    "src": "12521:12:5"
                                  }
                                ],
                                "id": 2950,
                                "name": "MemberAccess",
                                "src": "12521:27:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2936,
                                  "type": "bytes8",
                                  "value": "_newOutputValueBytes"
                                },
                                "id": 2951,
                                "name": "Identifier",
                                "src": "12549:20:5"
                              }
                            ],
                            "id": 2952,
                            "name": "FunctionCall",
                            "src": "12521:49:5"
                          }
                        ],
                        "id": 2953,
                        "name": "Assignment",
                        "src": "12503:67:5"
                      }
                    ],
                    "id": 2954,
                    "name": "ExpressionStatement",
                    "src": "12503:67:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_73070d97ee2d97fee4f5ee54e5f84e76381e76e0080eb0dd288e9ee00410e6fb",
                                  "typeString": "literal_string \"Not an allowed fee step\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2955,
                            "name": "Identifier",
                            "src": "12580:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "sub",
                                      "referencedDeclaration": 16774,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2942,
                                          "type": "uint256",
                                          "value": "_previousOutputValue"
                                        },
                                        "id": 2956,
                                        "name": "Identifier",
                                        "src": "12601:20:5"
                                      }
                                    ],
                                    "id": 2957,
                                    "name": "MemberAccess",
                                    "src": "12601:24:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2939,
                                      "type": "uint256",
                                      "value": "_newOutputValue"
                                    },
                                    "id": 2958,
                                    "name": "Identifier",
                                    "src": "12626:15:5"
                                  }
                                ],
                                "id": 2959,
                                "name": "FunctionCall",
                                "src": "12601:41:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "initialRedemptionFee",
                                  "referencedDeclaration": 3872,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2932,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2960,
                                    "name": "Identifier",
                                    "src": "12662:2:5"
                                  }
                                ],
                                "id": 2961,
                                "name": "MemberAccess",
                                "src": "12662:23:5"
                              }
                            ],
                            "id": 2962,
                            "name": "BinaryOperation",
                            "src": "12601:84:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4e6f7420616e20616c6c6f776564206665652073746570",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Not an allowed fee step\"",
                              "value": "Not an allowed fee step"
                            },
                            "id": 2963,
                            "name": "Literal",
                            "src": "12699:25:5"
                          }
                        ],
                        "id": 2964,
                        "name": "FunctionCall",
                        "src": "12580:154:5"
                      }
                    ],
                    "id": 2965,
                    "name": "ExpressionStatement",
                    "src": "12580:154:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2967
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_previousSighash",
                          "scope": 2993,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 2966,
                            "name": "ElementaryTypeName",
                            "src": "12834:7:5"
                          }
                        ],
                        "id": 2967,
                        "name": "VariableDeclaration",
                        "src": "12834:24:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_storage",
                                  "typeString": "bytes storage ref"
                                },
                                {
                                  "typeIdentifier": "t_bytes20",
                                  "typeString": "bytes20"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_storage",
                                  "typeString": "bytes storage ref"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "wpkhSpendSighash",
                              "referencedDeclaration": 13771,
                              "type": "function (bytes memory,bytes20,bytes8,bytes8,bytes memory) pure returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13824,
                                  "type": "type(library CheckBitcoinSigs)",
                                  "value": "CheckBitcoinSigs"
                                },
                                "id": 2968,
                                "name": "Identifier",
                                "src": "12873:16:5"
                              }
                            ],
                            "id": 2969,
                            "name": "MemberAccess",
                            "src": "12873:33:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoOutpoint",
                              "referencedDeclaration": 3884,
                              "type": "bytes storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2932,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2970,
                                "name": "Identifier",
                                "src": "12924:2:5"
                              }
                            ],
                            "id": 2971,
                            "name": "MemberAccess",
                            "src": "12924:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes20",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "signerPKH",
                                  "referencedDeclaration": 4458,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes20)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2932,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2972,
                                    "name": "Identifier",
                                    "src": "12957:2:5"
                                  }
                                ],
                                "id": 2973,
                                "name": "MemberAccess",
                                "src": "12957:12:5"
                              }
                            ],
                            "id": 2974,
                            "name": "FunctionCall",
                            "src": "12957:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoValueBytes",
                              "referencedDeclaration": 3880,
                              "type": "bytes8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2932,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2975,
                                "name": "Identifier",
                                "src": "12989:2:5"
                              }
                            ],
                            "id": 2976,
                            "name": "MemberAccess",
                            "src": "12989:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2934,
                              "type": "bytes8",
                              "value": "_previousOutputValueBytes"
                            },
                            "id": 2977,
                            "name": "Identifier",
                            "src": "13024:25:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "redeemerOutputScript",
                              "referencedDeclaration": 3870,
                              "type": "bytes storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2932,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 2978,
                                "name": "Identifier",
                                "src": "13067:2:5"
                              }
                            ],
                            "id": 2979,
                            "name": "MemberAccess",
                            "src": "13067:23:5"
                          }
                        ],
                        "id": 2980,
                        "name": "FunctionCall",
                        "src": "12873:231:5"
                      }
                    ],
                    "id": 2981,
                    "name": "VariableDeclarationStatement",
                    "src": "12834:270:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_8358de3755f4cf5c12654571a27cfafc3028b24d68e0de14cdd61cc3bb7bda1b",
                                  "typeString": "literal_string \"Provided previous value does not yield previous sighash\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2982,
                            "name": "Identifier",
                            "src": "13114:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "wasDigestApprovedForSigning",
                                      "referencedDeclaration": 4535,
                                      "type": "function (struct DepositUtils.Deposit storage pointer,bytes32) view returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2932,
                                          "type": "struct DepositUtils.Deposit storage pointer",
                                          "value": "_d"
                                        },
                                        "id": 2983,
                                        "name": "Identifier",
                                        "src": "13135:2:5"
                                      }
                                    ],
                                    "id": 2984,
                                    "name": "MemberAccess",
                                    "src": "13135:30:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2967,
                                      "type": "bytes32",
                                      "value": "_previousSighash"
                                    },
                                    "id": 2985,
                                    "name": "Identifier",
                                    "src": "13166:16:5"
                                  }
                                ],
                                "id": 2986,
                                "name": "FunctionCall",
                                "src": "13135:48:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "withdrawalRequestTime",
                                  "referencedDeclaration": 3876,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2932,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 2987,
                                    "name": "Identifier",
                                    "src": "13203:2:5"
                                  }
                                ],
                                "id": 2988,
                                "name": "MemberAccess",
                                "src": "13203:24:5"
                              }
                            ],
                            "id": 2989,
                            "name": "BinaryOperation",
                            "src": "13135:92:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "50726f76696465642070726576696f75732076616c756520646f6573206e6f74207969656c642070726576696f75732073696768617368",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Provided previous value does not yield previous sighash\"",
                              "value": "Provided previous value does not yield previous sighash"
                            },
                            "id": 2990,
                            "name": "Literal",
                            "src": "13241:57:5"
                          }
                        ],
                        "id": 2991,
                        "name": "FunctionCall",
                        "src": "13114:194:5"
                      }
                    ],
                    "id": 2992,
                    "name": "ExpressionStatement",
                    "src": "13114:194:5"
                  }
                ],
                "id": 2993,
                "name": "Block",
                "src": "12299:1016:5"
              }
            ],
            "id": 2994,
            "name": "FunctionDefinition",
            "src": "12090:1225:5"
          },
          {
            "attributes": {
              "documentation": "@notice                 Anyone may provide a withdrawal proof to prove redemption.\n @dev                    The signers will be penalized if this is not called.\n @param  _d              Deposit storage pointer.\n @param  _txVersion      Transaction version number (4-byte LE).\n @param  _txInputVector  All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\n @param  _txOutputVector All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\n @param  _txLocktime     Final 4 bytes of the transaction.\n @param  _merkleProof    The merkle proof of inclusion of the tx in the bitcoin block.\n @param  _txIndexInBlock The index of the tx in the Bitcoin block (0-indexed).\n @param  _bitcoinHeaders An array of tightly-packed bitcoin headers.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "provideRedemptionProof",
              "scope": 3269,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 3100,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 2995,
                        "name": "UserDefinedTypeName",
                        "src": "14256:20:5"
                      }
                    ],
                    "id": 2996,
                    "name": "VariableDeclaration",
                    "src": "14256:31:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txVersion",
                      "scope": 3100,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 2997,
                        "name": "ElementaryTypeName",
                        "src": "14297:6:5"
                      }
                    ],
                    "id": 2998,
                    "name": "VariableDeclaration",
                    "src": "14297:17:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txInputVector",
                      "scope": 3100,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 2999,
                        "name": "ElementaryTypeName",
                        "src": "14324:5:5"
                      }
                    ],
                    "id": 3000,
                    "name": "VariableDeclaration",
                    "src": "14324:27:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txOutputVector",
                      "scope": 3100,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 3001,
                        "name": "ElementaryTypeName",
                        "src": "14361:5:5"
                      }
                    ],
                    "id": 3002,
                    "name": "VariableDeclaration",
                    "src": "14361:28:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txLocktime",
                      "scope": 3100,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 3003,
                        "name": "ElementaryTypeName",
                        "src": "14399:6:5"
                      }
                    ],
                    "id": 3004,
                    "name": "VariableDeclaration",
                    "src": "14399:18:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_merkleProof",
                      "scope": 3100,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 3005,
                        "name": "ElementaryTypeName",
                        "src": "14427:5:5"
                      }
                    ],
                    "id": 3006,
                    "name": "VariableDeclaration",
                    "src": "14427:25:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txIndexInBlock",
                      "scope": 3100,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3007,
                        "name": "ElementaryTypeName",
                        "src": "14462:7:5"
                      }
                    ],
                    "id": 3008,
                    "name": "VariableDeclaration",
                    "src": "14462:23:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bitcoinHeaders",
                      "scope": 3100,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 3009,
                        "name": "ElementaryTypeName",
                        "src": "14495:5:5"
                      }
                    ],
                    "id": 3010,
                    "name": "VariableDeclaration",
                    "src": "14495:28:5"
                  }
                ],
                "id": 3011,
                "name": "ParameterList",
                "src": "14246:283:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3012,
                "name": "ParameterList",
                "src": "14537:0:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3014
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_txid",
                          "scope": 3099,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 3013,
                            "name": "ElementaryTypeName",
                            "src": "14604:7:5"
                          }
                        ],
                        "id": 3014,
                        "name": "VariableDeclaration",
                        "src": "14604:13:5"
                      }
                    ],
                    "id": 3015,
                    "name": "VariableDeclarationStatement",
                    "src": "14604:13:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3017
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_fundingOutputValue",
                          "scope": 3099,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 3016,
                            "name": "ElementaryTypeName",
                            "src": "14627:7:5"
                          }
                        ],
                        "id": 3017,
                        "name": "VariableDeclaration",
                        "src": "14627:27:5"
                      }
                    ],
                    "id": 3018,
                    "name": "VariableDeclarationStatement",
                    "src": "14627:27:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_55495d2a20faf92bc3476b6e0e08b10d7cf379882918ee014090383c3adfa7fe",
                                  "typeString": "literal_string \"Redemption proof only allowed from redemption flow\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3019,
                            "name": "Identifier",
                            "src": "14665:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "inRedemption",
                                  "referencedDeclaration": 3361,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2996,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 3020,
                                    "name": "Identifier",
                                    "src": "14686:2:5"
                                  }
                                ],
                                "id": 3021,
                                "name": "MemberAccess",
                                "src": "14686:15:5"
                              }
                            ],
                            "id": 3022,
                            "name": "FunctionCall",
                            "src": "14686:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "526564656d7074696f6e2070726f6f66206f6e6c7920616c6c6f7765642066726f6d20726564656d7074696f6e20666c6f77",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Redemption proof only allowed from redemption flow\"",
                              "value": "Redemption proof only allowed from redemption flow"
                            },
                            "id": 3023,
                            "name": "Literal",
                            "src": "14717:52:5"
                          }
                        ],
                        "id": 3024,
                        "name": "FunctionCall",
                        "src": "14665:114:5"
                      }
                    ],
                    "id": 3025,
                    "name": "ExpressionStatement",
                    "src": "14665:114:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3017,
                              "type": "uint256",
                              "value": "_fundingOutputValue"
                            },
                            "id": 3026,
                            "name": "Identifier",
                            "src": "14790:19:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                      "typeString": "struct DepositUtils.Deposit storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3202,
                                  "type": "function (struct DepositUtils.Deposit storage pointer,bytes memory,bytes memory) view returns (uint256)",
                                  "value": "redemptionTransactionChecks"
                                },
                                "id": 3027,
                                "name": "Identifier",
                                "src": "14812:27:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2996,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 3028,
                                "name": "Identifier",
                                "src": "14853:2:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3000,
                                  "type": "bytes memory",
                                  "value": "_txInputVector"
                                },
                                "id": 3029,
                                "name": "Identifier",
                                "src": "14869:14:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3002,
                                  "type": "bytes memory",
                                  "value": "_txOutputVector"
                                },
                                "id": 3030,
                                "name": "Identifier",
                                "src": "14897:15:5"
                              }
                            ],
                            "id": 3031,
                            "name": "FunctionCall",
                            "src": "14812:110:5"
                          }
                        ],
                        "id": 3032,
                        "name": "Assignment",
                        "src": "14790:132:5"
                      }
                    ],
                    "id": 3033,
                    "name": "ExpressionStatement",
                    "src": "14790:132:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3014,
                              "type": "bytes32",
                              "value": "_txid"
                            },
                            "id": 3034,
                            "name": "Identifier",
                            "src": "14933:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "hash256",
                                  "referencedDeclaration": 11851,
                                  "type": "function (bytes memory) pure returns (bytes32)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "member_name": "encodePacked",
                                          "referencedDeclaration": null,
                                          "type": "function () pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 18347,
                                              "type": "abi",
                                              "value": "abi"
                                            },
                                            "id": 3035,
                                            "name": "Identifier",
                                            "src": "14941:3:5"
                                          }
                                        ],
                                        "id": 3036,
                                        "name": "MemberAccess",
                                        "src": "14941:29:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2998,
                                          "type": "bytes4",
                                          "value": "_txVersion"
                                        },
                                        "id": 3037,
                                        "name": "Identifier",
                                        "src": "14984:10:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3000,
                                          "type": "bytes memory",
                                          "value": "_txInputVector"
                                        },
                                        "id": 3038,
                                        "name": "Identifier",
                                        "src": "15008:14:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3002,
                                          "type": "bytes memory",
                                          "value": "_txOutputVector"
                                        },
                                        "id": 3039,
                                        "name": "Identifier",
                                        "src": "15036:15:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3004,
                                          "type": "bytes4",
                                          "value": "_txLocktime"
                                        },
                                        "id": 3040,
                                        "name": "Identifier",
                                        "src": "15065:11:5"
                                      }
                                    ],
                                    "id": 3041,
                                    "name": "FunctionCall",
                                    "src": "14941:145:5"
                                  }
                                ],
                                "id": 3042,
                                "name": "MemberAccess",
                                "src": "14941:166:5"
                              }
                            ],
                            "id": 3043,
                            "name": "FunctionCall",
                            "src": "14941:168:5"
                          }
                        ],
                        "id": 3044,
                        "name": "Assignment",
                        "src": "14933:176:5"
                      }
                    ],
                    "id": 3045,
                    "name": "ExpressionStatement",
                    "src": "14933:176:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "checkProofFromTxId",
                              "referencedDeclaration": 4069,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes32,bytes memory,uint256,bytes memory) view"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2996,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 3046,
                                "name": "Identifier",
                                "src": "15119:2:5"
                              }
                            ],
                            "id": 3048,
                            "name": "MemberAccess",
                            "src": "15119:21:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3014,
                              "type": "bytes32",
                              "value": "_txid"
                            },
                            "id": 3049,
                            "name": "Identifier",
                            "src": "15154:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3006,
                              "type": "bytes memory",
                              "value": "_merkleProof"
                            },
                            "id": 3050,
                            "name": "Identifier",
                            "src": "15173:12:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3008,
                              "type": "uint256",
                              "value": "_txIndexInBlock"
                            },
                            "id": 3051,
                            "name": "Identifier",
                            "src": "15199:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3010,
                              "type": "bytes memory",
                              "value": "_bitcoinHeaders"
                            },
                            "id": 3052,
                            "name": "Identifier",
                            "src": "15228:15:5"
                          }
                        ],
                        "id": 3053,
                        "name": "FunctionCall",
                        "src": "15119:134:5"
                      }
                    ],
                    "id": 3054,
                    "name": "ExpressionStatement",
                    "src": "15119:134:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_4ab3f952ba26a94d88e8cd9fe7400356e417913015cdeb4af2c4bbd982e459f1",
                                  "typeString": "literal_string \"Incorrect fee amount\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3055,
                            "name": "Identifier",
                            "src": "15264:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "sub",
                                          "referencedDeclaration": 16774,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                null
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "uint256",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    null
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "utxoValue",
                                                  "referencedDeclaration": 4471,
                                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 2996,
                                                      "type": "struct DepositUtils.Deposit storage pointer",
                                                      "value": "_d"
                                                    },
                                                    "id": 3056,
                                                    "name": "Identifier",
                                                    "src": "15286:2:5"
                                                  }
                                                ],
                                                "id": 3057,
                                                "name": "MemberAccess",
                                                "src": "15286:12:5"
                                              }
                                            ],
                                            "id": 3058,
                                            "name": "FunctionCall",
                                            "src": "15286:14:5"
                                          }
                                        ],
                                        "id": 3059,
                                        "name": "MemberAccess",
                                        "src": "15286:18:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3017,
                                          "type": "uint256",
                                          "value": "_fundingOutputValue"
                                        },
                                        "id": 3060,
                                        "name": "Identifier",
                                        "src": "15305:19:5"
                                      }
                                    ],
                                    "id": 3061,
                                    "name": "FunctionCall",
                                    "src": "15286:39:5"
                                  }
                                ],
                                "id": 3062,
                                "name": "TupleExpression",
                                "src": "15285:41:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "latestRedemptionFee",
                                  "referencedDeclaration": 3874,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2996,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 3063,
                                    "name": "Identifier",
                                    "src": "15330:2:5"
                                  }
                                ],
                                "id": 3064,
                                "name": "MemberAccess",
                                "src": "15330:22:5"
                              }
                            ],
                            "id": 3065,
                            "name": "BinaryOperation",
                            "src": "15285:67:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "496e636f72726563742066656520616d6f756e74",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Incorrect fee amount\"",
                              "value": "Incorrect fee amount"
                            },
                            "id": 3066,
                            "name": "Literal",
                            "src": "15366:22:5"
                          }
                        ],
                        "id": 3067,
                        "name": "FunctionCall",
                        "src": "15264:134:5"
                      }
                    ],
                    "id": 3068,
                    "name": "ExpressionStatement",
                    "src": "15264:134:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2425,
                              "type": "function (struct DepositUtils.Deposit storage pointer)",
                              "value": "distributeSignerFee"
                            },
                            "id": 3069,
                            "name": "Identifier",
                            "src": "15465:19:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2996,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 3070,
                            "name": "Identifier",
                            "src": "15485:2:5"
                          }
                        ],
                        "id": 3071,
                        "name": "FunctionCall",
                        "src": "15465:23:5"
                      }
                    ],
                    "id": 3072,
                    "name": "ExpressionStatement",
                    "src": "15465:23:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "closeKeep",
                              "referencedDeclaration": 3911,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2996,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 3073,
                                "name": "Identifier",
                                "src": "15498:2:5"
                              }
                            ],
                            "id": 3075,
                            "name": "MemberAccess",
                            "src": "15498:12:5"
                          }
                        ],
                        "id": 3076,
                        "name": "FunctionCall",
                        "src": "15498:14:5"
                      }
                    ],
                    "id": 3077,
                    "name": "ExpressionStatement",
                    "src": "15498:14:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "distributeFeeRebate",
                              "referencedDeclaration": 4843,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2996,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 3078,
                                "name": "Identifier",
                                "src": "15523:2:5"
                              }
                            ],
                            "id": 3080,
                            "name": "MemberAccess",
                            "src": "15523:22:5"
                          }
                        ],
                        "id": 3081,
                        "name": "FunctionCall",
                        "src": "15523:24:5"
                      }
                    ],
                    "id": 3082,
                    "name": "ExpressionStatement",
                    "src": "15523:24:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "setRedeemed",
                              "referencedDeclaration": 3717,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2996,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 3083,
                                "name": "Identifier",
                                "src": "15585:2:5"
                              }
                            ],
                            "id": 3085,
                            "name": "MemberAccess",
                            "src": "15585:14:5"
                          }
                        ],
                        "id": 3086,
                        "name": "FunctionCall",
                        "src": "15585:16:5"
                      }
                    ],
                    "id": 3087,
                    "name": "ExpressionStatement",
                    "src": "15585:16:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "redemptionTeardown",
                              "referencedDeclaration": 4636,
                              "type": "function (struct DepositUtils.Deposit storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2996,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 3088,
                                "name": "Identifier",
                                "src": "15611:2:5"
                              }
                            ],
                            "id": 3090,
                            "name": "MemberAccess",
                            "src": "15611:21:5"
                          }
                        ],
                        "id": 3091,
                        "name": "FunctionCall",
                        "src": "15611:23:5"
                      }
                    ],
                    "id": 3092,
                    "name": "ExpressionStatement",
                    "src": "15611:23:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "logRedeemed",
                              "referencedDeclaration": 5377,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2996,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 3093,
                                "name": "Identifier",
                                "src": "15644:2:5"
                              }
                            ],
                            "id": 3095,
                            "name": "MemberAccess",
                            "src": "15644:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3014,
                              "type": "bytes32",
                              "value": "_txid"
                            },
                            "id": 3096,
                            "name": "Identifier",
                            "src": "15659:5:5"
                          }
                        ],
                        "id": 3097,
                        "name": "FunctionCall",
                        "src": "15644:21:5"
                      }
                    ],
                    "id": 3098,
                    "name": "ExpressionStatement",
                    "src": "15644:21:5"
                  }
                ],
                "id": 3099,
                "name": "Block",
                "src": "14537:1135:5"
              }
            ],
            "id": 3100,
            "name": "FunctionDefinition",
            "src": "14215:1457:5"
          },
          {
            "attributes": {
              "documentation": "@notice                 Check the redemption transaction input and output vector to ensure the transaction spends\n                         the correct UTXO and sends value to the appropriate public key hash.\n @dev                    We only look at the first input and first output. Revert if we find the wrong UTXO or value recipient.\n                         It's safe to look at only the first input/output as anything that breaks this can be considered fraud\n                         and can be caught by ECDSAFraudProof.\n @param  _d              Deposit storage pointer.\n @param _txInputVector   All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\n @param _txOutputVector  All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\n @return                 The value sent to the redeemer's public key hash.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "redemptionTransactionChecks",
              "scope": 3269,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 3202,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 3101,
                        "name": "UserDefinedTypeName",
                        "src": "16692:20:5"
                      }
                    ],
                    "id": 3102,
                    "name": "VariableDeclaration",
                    "src": "16692:31:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txInputVector",
                      "scope": 3202,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 3103,
                        "name": "ElementaryTypeName",
                        "src": "16733:5:5"
                      }
                    ],
                    "id": 3104,
                    "name": "VariableDeclaration",
                    "src": "16733:27:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txOutputVector",
                      "scope": 3202,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 3105,
                        "name": "ElementaryTypeName",
                        "src": "16770:5:5"
                      }
                    ],
                    "id": 3106,
                    "name": "VariableDeclaration",
                    "src": "16770:28:5"
                  }
                ],
                "id": 3107,
                "name": "ParameterList",
                "src": "16682:122:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3202,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3108,
                        "name": "ElementaryTypeName",
                        "src": "16826:7:5"
                      }
                    ],
                    "id": 3109,
                    "name": "VariableDeclaration",
                    "src": "16826:7:5"
                  }
                ],
                "id": 3110,
                "name": "ParameterList",
                "src": "16825:9:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_50569d922bdc14a5fab9eaf6cfc2b8f7434918cbe4e7c29ccc434b2a080a8a82",
                                  "typeString": "literal_string \"invalid input vector provided\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3111,
                            "name": "Identifier",
                            "src": "16845:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "validateVin",
                                  "referencedDeclaration": 12774,
                                  "type": "function (bytes memory) pure returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3104,
                                      "type": "bytes memory",
                                      "value": "_txInputVector"
                                    },
                                    "id": 3112,
                                    "name": "Identifier",
                                    "src": "16853:14:5"
                                  }
                                ],
                                "id": 3113,
                                "name": "MemberAccess",
                                "src": "16853:26:5"
                              }
                            ],
                            "id": 3114,
                            "name": "FunctionCall",
                            "src": "16853:28:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "696e76616c696420696e70757420766563746f722070726f7669646564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"invalid input vector provided\"",
                              "value": "invalid input vector provided"
                            },
                            "id": 3115,
                            "name": "Literal",
                            "src": "16883:31:5"
                          }
                        ],
                        "id": 3116,
                        "name": "FunctionCall",
                        "src": "16845:70:5"
                      }
                    ],
                    "id": 3117,
                    "name": "ExpressionStatement",
                    "src": "16845:70:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_a33d06f17f9a7037734a39e63c195f479a3381b57e1fdb94340fd16475711edf",
                                  "typeString": "literal_string \"invalid output vector provided\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3118,
                            "name": "Identifier",
                            "src": "16925:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "validateVout",
                                  "referencedDeclaration": 12866,
                                  "type": "function (bytes memory) pure returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3106,
                                      "type": "bytes memory",
                                      "value": "_txOutputVector"
                                    },
                                    "id": 3119,
                                    "name": "Identifier",
                                    "src": "16946:15:5"
                                  }
                                ],
                                "id": 3120,
                                "name": "MemberAccess",
                                "src": "16946:28:5"
                              }
                            ],
                            "id": 3121,
                            "name": "FunctionCall",
                            "src": "16946:30:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "696e76616c6964206f757470757420766563746f722070726f7669646564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"invalid output vector provided\"",
                              "value": "invalid output vector provided"
                            },
                            "id": 3122,
                            "name": "Literal",
                            "src": "16990:32:5"
                          }
                        ],
                        "id": 3123,
                        "name": "FunctionCall",
                        "src": "16925:107:5"
                      }
                    ],
                    "id": 3124,
                    "name": "ExpressionStatement",
                    "src": "16925:107:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3126
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_input",
                          "scope": 3201,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 3125,
                            "name": "ElementaryTypeName",
                            "src": "17042:5:5"
                          }
                        ],
                        "id": 3126,
                        "name": "VariableDeclaration",
                        "src": "17042:19:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "slice",
                              "referencedDeclaration": 13281,
                              "type": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3104,
                                  "type": "bytes memory",
                                  "value": "_txInputVector"
                                },
                                "id": 3127,
                                "name": "Identifier",
                                "src": "17076:14:5"
                              }
                            ],
                            "id": 3128,
                            "name": "MemberAccess",
                            "src": "17076:20:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 3129,
                            "name": "Literal",
                            "src": "17097:1:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3104,
                                      "type": "bytes memory",
                                      "value": "_txInputVector"
                                    },
                                    "id": 3130,
                                    "name": "Identifier",
                                    "src": "17100:14:5"
                                  }
                                ],
                                "id": 3131,
                                "name": "MemberAccess",
                                "src": "17100:21:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 3132,
                                "name": "Literal",
                                "src": "17124:1:5"
                              }
                            ],
                            "id": 3133,
                            "name": "BinaryOperation",
                            "src": "17100:25:5"
                          }
                        ],
                        "id": 3134,
                        "name": "FunctionCall",
                        "src": "17076:50:5"
                      }
                    ],
                    "id": 3135,
                    "name": "VariableDeclarationStatement",
                    "src": "17042:84:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_bdf35aaab9c3b52145f0e9bf278e28d0c3ed0f752303b82cd9efbe3c1fea3306",
                                  "typeString": "literal_string \"Tx spends the wrong UTXO\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3136,
                            "name": "Identifier",
                            "src": "17137:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18354,
                                      "type": "function (bytes memory) pure returns (bytes32)",
                                      "value": "keccak256"
                                    },
                                    "id": 3137,
                                    "name": "Identifier",
                                    "src": "17158:9:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "extractOutpoint",
                                          "referencedDeclaration": 12249,
                                          "type": "function (bytes memory) pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3126,
                                              "type": "bytes memory",
                                              "value": "_input"
                                            },
                                            "id": 3138,
                                            "name": "Identifier",
                                            "src": "17168:6:5"
                                          }
                                        ],
                                        "id": 3139,
                                        "name": "MemberAccess",
                                        "src": "17168:22:5"
                                      }
                                    ],
                                    "id": 3140,
                                    "name": "FunctionCall",
                                    "src": "17168:24:5"
                                  }
                                ],
                                "id": 3141,
                                "name": "FunctionCall",
                                "src": "17158:35:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_storage",
                                          "typeString": "bytes storage ref"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18354,
                                      "type": "function (bytes memory) pure returns (bytes32)",
                                      "value": "keccak256"
                                    },
                                    "id": 3142,
                                    "name": "Identifier",
                                    "src": "17197:9:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "utxoOutpoint",
                                      "referencedDeclaration": 3884,
                                      "type": "bytes storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3102,
                                          "type": "struct DepositUtils.Deposit storage pointer",
                                          "value": "_d"
                                        },
                                        "id": 3143,
                                        "name": "Identifier",
                                        "src": "17207:2:5"
                                      }
                                    ],
                                    "id": 3144,
                                    "name": "MemberAccess",
                                    "src": "17207:15:5"
                                  }
                                ],
                                "id": 3145,
                                "name": "FunctionCall",
                                "src": "17197:26:5"
                              }
                            ],
                            "id": 3146,
                            "name": "BinaryOperation",
                            "src": "17158:65:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "5478207370656e6473207468652077726f6e67205554584f",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Tx spends the wrong UTXO\"",
                              "value": "Tx spends the wrong UTXO"
                            },
                            "id": 3147,
                            "name": "Literal",
                            "src": "17237:26:5"
                          }
                        ],
                        "id": 3148,
                        "name": "FunctionCall",
                        "src": "17137:136:5"
                      }
                    ],
                    "id": 3149,
                    "name": "ExpressionStatement",
                    "src": "17137:136:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3151
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_output",
                          "scope": 3201,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 3150,
                            "name": "ElementaryTypeName",
                            "src": "17284:5:5"
                          }
                        ],
                        "id": 3151,
                        "name": "VariableDeclaration",
                        "src": "17284:20:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "slice",
                              "referencedDeclaration": 13281,
                              "type": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3106,
                                  "type": "bytes memory",
                                  "value": "_txOutputVector"
                                },
                                "id": 3152,
                                "name": "Identifier",
                                "src": "17319:15:5"
                              }
                            ],
                            "id": 3153,
                            "name": "MemberAccess",
                            "src": "17319:21:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 3154,
                            "name": "Literal",
                            "src": "17341:1:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3106,
                                      "type": "bytes memory",
                                      "value": "_txOutputVector"
                                    },
                                    "id": 3155,
                                    "name": "Identifier",
                                    "src": "17344:15:5"
                                  }
                                ],
                                "id": 3156,
                                "name": "MemberAccess",
                                "src": "17344:22:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 3157,
                                "name": "Literal",
                                "src": "17369:1:5"
                              }
                            ],
                            "id": 3158,
                            "name": "BinaryOperation",
                            "src": "17344:26:5"
                          }
                        ],
                        "id": 3159,
                        "name": "FunctionCall",
                        "src": "17319:52:5"
                      }
                    ],
                    "id": 3160,
                    "name": "VariableDeclarationStatement",
                    "src": "17284:87:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3162
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_expectedOutputScript",
                          "scope": 3201,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 3161,
                            "name": "ElementaryTypeName",
                            "src": "17381:5:5"
                          }
                        ],
                        "id": 3162,
                        "name": "VariableDeclaration",
                        "src": "17381:34:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "redeemerOutputScript",
                          "referencedDeclaration": 3870,
                          "type": "bytes storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3102,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 3163,
                            "name": "Identifier",
                            "src": "17418:2:5"
                          }
                        ],
                        "id": 3164,
                        "name": "MemberAccess",
                        "src": "17418:23:5"
                      }
                    ],
                    "id": 3165,
                    "name": "VariableDeclarationStatement",
                    "src": "17381:60:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_3177d29cc9ac9a8d5907859e05db923b9a89c60a9526b22858f4e22d036a341a",
                                  "typeString": "literal_string \"Output script is too short to extract the expected script\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3166,
                            "name": "Identifier",
                            "src": "17451:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3151,
                                          "type": "bytes memory",
                                          "value": "_output"
                                        },
                                        "id": 3167,
                                        "name": "Identifier",
                                        "src": "17472:7:5"
                                      }
                                    ],
                                    "id": 3168,
                                    "name": "MemberAccess",
                                    "src": "17472:14:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "38",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 8",
                                      "value": "8"
                                    },
                                    "id": 3169,
                                    "name": "Literal",
                                    "src": "17489:1:5"
                                  }
                                ],
                                "id": 3170,
                                "name": "BinaryOperation",
                                "src": "17472:18:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "redeemerOutputScript",
                                      "referencedDeclaration": 3870,
                                      "type": "bytes storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3102,
                                          "type": "struct DepositUtils.Deposit storage pointer",
                                          "value": "_d"
                                        },
                                        "id": 3171,
                                        "name": "Identifier",
                                        "src": "17494:2:5"
                                      }
                                    ],
                                    "id": 3172,
                                    "name": "MemberAccess",
                                    "src": "17494:23:5"
                                  }
                                ],
                                "id": 3173,
                                "name": "MemberAccess",
                                "src": "17494:30:5"
                              }
                            ],
                            "id": 3174,
                            "name": "BinaryOperation",
                            "src": "17472:52:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4f75747075742073637269707420697320746f6f2073686f727420746f20657874726163742074686520657870656374656420736372697074",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Output script is too short to extract the expected script\"",
                              "value": "Output script is too short to extract the expected script"
                            },
                            "id": 3175,
                            "name": "Literal",
                            "src": "17538:59:5"
                          }
                        ],
                        "id": 3176,
                        "name": "FunctionCall",
                        "src": "17451:156:5"
                      }
                    ],
                    "id": 3177,
                    "name": "ExpressionStatement",
                    "src": "17451:156:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_44163b253b338a385561999b21cd7ba7e8989cb0c0d5b9a36675eaec02a14cfd",
                                  "typeString": "literal_string \"Tx sends value to wrong output script\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3178,
                            "name": "Identifier",
                            "src": "17617:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18354,
                                      "type": "function (bytes memory) pure returns (bytes32)",
                                      "value": "keccak256"
                                    },
                                    "id": 3179,
                                    "name": "Identifier",
                                    "src": "17638:9:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_8_by_1",
                                              "typeString": "int_const 8"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "slice",
                                          "referencedDeclaration": 13281,
                                          "type": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3151,
                                              "type": "bytes memory",
                                              "value": "_output"
                                            },
                                            "id": 3180,
                                            "name": "Identifier",
                                            "src": "17648:7:5"
                                          }
                                        ],
                                        "id": 3181,
                                        "name": "MemberAccess",
                                        "src": "17648:13:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "38",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 8",
                                          "value": "8"
                                        },
                                        "id": 3182,
                                        "name": "Literal",
                                        "src": "17662:1:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "length",
                                          "referencedDeclaration": null,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3162,
                                              "type": "bytes memory",
                                              "value": "_expectedOutputScript"
                                            },
                                            "id": 3183,
                                            "name": "Identifier",
                                            "src": "17665:21:5"
                                          }
                                        ],
                                        "id": 3184,
                                        "name": "MemberAccess",
                                        "src": "17665:28:5"
                                      }
                                    ],
                                    "id": 3185,
                                    "name": "FunctionCall",
                                    "src": "17648:46:5"
                                  }
                                ],
                                "id": 3186,
                                "name": "FunctionCall",
                                "src": "17638:57:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18354,
                                      "type": "function (bytes memory) pure returns (bytes32)",
                                      "value": "keccak256"
                                    },
                                    "id": 3187,
                                    "name": "Identifier",
                                    "src": "17715:9:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3162,
                                      "type": "bytes memory",
                                      "value": "_expectedOutputScript"
                                    },
                                    "id": 3188,
                                    "name": "Identifier",
                                    "src": "17725:21:5"
                                  }
                                ],
                                "id": 3189,
                                "name": "FunctionCall",
                                "src": "17715:32:5"
                              }
                            ],
                            "id": 3190,
                            "name": "BinaryOperation",
                            "src": "17638:109:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "54782073656e64732076616c756520746f2077726f6e67206f757470757420736372697074",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Tx sends value to wrong output script\"",
                              "value": "Tx sends value to wrong output script"
                            },
                            "id": 3191,
                            "name": "Literal",
                            "src": "17761:39:5"
                          }
                        ],
                        "id": 3192,
                        "name": "FunctionCall",
                        "src": "17617:193:5"
                      }
                    ],
                    "id": 3193,
                    "name": "ExpressionStatement",
                    "src": "17617:193:5"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3110
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)",
                                  "value": "uint256"
                                },
                                "id": 3194,
                                "name": "ElementaryTypeNameExpression",
                                "src": "17828:7:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint64",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "extractValue",
                                      "referencedDeclaration": 12496,
                                      "type": "function (bytes memory) pure returns (uint64)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3151,
                                          "type": "bytes memory",
                                          "value": "_output"
                                        },
                                        "id": 3195,
                                        "name": "Identifier",
                                        "src": "17836:7:5"
                                      }
                                    ],
                                    "id": 3196,
                                    "name": "MemberAccess",
                                    "src": "17836:20:5"
                                  }
                                ],
                                "id": 3197,
                                "name": "FunctionCall",
                                "src": "17836:22:5"
                              }
                            ],
                            "id": 3198,
                            "name": "FunctionCall",
                            "src": "17828:31:5"
                          }
                        ],
                        "id": 3199,
                        "name": "TupleExpression",
                        "src": "17827:33:5"
                      }
                    ],
                    "id": 3200,
                    "name": "Return",
                    "src": "17820:40:5"
                  }
                ],
                "id": 3201,
                "name": "Block",
                "src": "16835:1032:5"
              }
            ],
            "id": 3202,
            "name": "FunctionDefinition",
            "src": "16646:1221:5"
          },
          {
            "attributes": {
              "documentation": "@notice     Anyone may notify the contract that the signers have failed to produce a signature.\n @dev        This is considered fraud, and is punished.\n @param  _d  Deposit storage pointer.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "notifyRedemptionSignatureTimedOut",
              "scope": 3269,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 3235,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 3203,
                        "name": "UserDefinedTypeName",
                        "src": "18128:20:5"
                      }
                    ],
                    "id": 3204,
                    "name": "VariableDeclaration",
                    "src": "18128:31:5"
                  }
                ],
                "id": 3205,
                "name": "ParameterList",
                "src": "18127:33:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3206,
                "name": "ParameterList",
                "src": "18182:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_7f1554af04c7494845f652eef1b9c0205d41f382eeafa05cc3b4d8b6c1803e50",
                                  "typeString": "literal_string \"Not currently awaiting a signature\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3207,
                            "name": "Identifier",
                            "src": "18192:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "inAwaitingWithdrawalSignature",
                                  "referencedDeclaration": 3516,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3204,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 3208,
                                    "name": "Identifier",
                                    "src": "18213:2:5"
                                  }
                                ],
                                "id": 3209,
                                "name": "MemberAccess",
                                "src": "18213:32:5"
                              }
                            ],
                            "id": 3210,
                            "name": "FunctionCall",
                            "src": "18213:34:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4e6f742063757272656e746c79206177616974696e672061207369676e6174757265",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Not currently awaiting a signature\"",
                              "value": "Not currently awaiting a signature"
                            },
                            "id": 3211,
                            "name": "Literal",
                            "src": "18261:36:5"
                          }
                        ],
                        "id": 3212,
                        "name": "FunctionCall",
                        "src": "18192:115:5"
                      }
                    ],
                    "id": 3213,
                    "name": "ExpressionStatement",
                    "src": "18192:115:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_2e490460fbb0f0f31215b8bddba35dc1a72da328a15b10c0459929ad75b26aa9",
                                  "typeString": "literal_string \"Signature timer has not elapsed\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3214,
                            "name": "Identifier",
                            "src": "18317:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "timestamp",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18350,
                                      "type": "block",
                                      "value": "block"
                                    },
                                    "id": 3215,
                                    "name": "Identifier",
                                    "src": "18338:5:5"
                                  }
                                ],
                                "id": 3216,
                                "name": "MemberAccess",
                                "src": "18338:15:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "add",
                                      "referencedDeclaration": 16749,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "withdrawalRequestTime",
                                          "referencedDeclaration": 3876,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3204,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 3217,
                                            "name": "Identifier",
                                            "src": "18372:2:5"
                                          }
                                        ],
                                        "id": 3218,
                                        "name": "MemberAccess",
                                        "src": "18372:24:5"
                                      }
                                    ],
                                    "id": 3219,
                                    "name": "MemberAccess",
                                    "src": "18372:28:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "getSignatureTimeout",
                                          "referencedDeclaration": 6692,
                                          "type": "function () pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 6757,
                                              "type": "type(library TBTCConstants)",
                                              "value": "TBTCConstants"
                                            },
                                            "id": 3220,
                                            "name": "Identifier",
                                            "src": "18422:13:5"
                                          }
                                        ],
                                        "id": 3221,
                                        "name": "MemberAccess",
                                        "src": "18422:33:5"
                                      }
                                    ],
                                    "id": 3222,
                                    "name": "FunctionCall",
                                    "src": "18422:35:5"
                                  }
                                ],
                                "id": 3223,
                                "name": "FunctionCall",
                                "src": "18372:103:5"
                              }
                            ],
                            "id": 3224,
                            "name": "BinaryOperation",
                            "src": "18338:137:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "5369676e61747572652074696d657220686173206e6f7420656c6170736564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Signature timer has not elapsed\"",
                              "value": "Signature timer has not elapsed"
                            },
                            "id": 3225,
                            "name": "Literal",
                            "src": "18489:33:5"
                          }
                        ],
                        "id": 3226,
                        "name": "FunctionCall",
                        "src": "18317:215:5"
                      }
                    ],
                    "id": 3227,
                    "name": "ExpressionStatement",
                    "src": "18317:215:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "startLiquidation",
                              "referencedDeclaration": 1957,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3204,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 3228,
                                "name": "Identifier",
                                "src": "18542:2:5"
                              }
                            ],
                            "id": 3230,
                            "name": "MemberAccess",
                            "src": "18542:19:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "66616c7365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "false"
                            },
                            "id": 3231,
                            "name": "Literal",
                            "src": "18562:5:5"
                          }
                        ],
                        "id": 3232,
                        "name": "FunctionCall",
                        "src": "18542:26:5"
                      }
                    ],
                    "id": 3233,
                    "name": "ExpressionStatement",
                    "src": "18542:26:5"
                  }
                ],
                "id": 3234,
                "name": "Block",
                "src": "18182:420:5"
              }
            ],
            "id": 3235,
            "name": "FunctionDefinition",
            "src": "18085:517:5"
          },
          {
            "attributes": {
              "documentation": "@notice     Anyone may notify the contract that the signers have failed to produce a redemption proof.\n @dev        This is considered fraud, and is punished.\n @param  _d  Deposit storage pointer.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "notifyRedemptionProofTimedOut",
              "scope": 3269,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 3268,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 3236,
                        "name": "UserDefinedTypeName",
                        "src": "18866:20:5"
                      }
                    ],
                    "id": 3237,
                    "name": "VariableDeclaration",
                    "src": "18866:31:5"
                  }
                ],
                "id": 3238,
                "name": "ParameterList",
                "src": "18865:33:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3239,
                "name": "ParameterList",
                "src": "18920:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_45abe220509141867c1d364709ee82f771277a19a82d486d123671306d9de8a0",
                                  "typeString": "literal_string \"Not currently awaiting a redemption proof\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3240,
                            "name": "Identifier",
                            "src": "18930:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "inAwaitingWithdrawalProof",
                                  "referencedDeclaration": 3532,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3237,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 3241,
                                    "name": "Identifier",
                                    "src": "18951:2:5"
                                  }
                                ],
                                "id": 3242,
                                "name": "MemberAccess",
                                "src": "18951:28:5"
                              }
                            ],
                            "id": 3243,
                            "name": "FunctionCall",
                            "src": "18951:30:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4e6f742063757272656e746c79206177616974696e67206120726564656d7074696f6e2070726f6f66",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Not currently awaiting a redemption proof\"",
                              "value": "Not currently awaiting a redemption proof"
                            },
                            "id": 3244,
                            "name": "Literal",
                            "src": "18995:43:5"
                          }
                        ],
                        "id": 3245,
                        "name": "FunctionCall",
                        "src": "18930:118:5"
                      }
                    ],
                    "id": 3246,
                    "name": "ExpressionStatement",
                    "src": "18930:118:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_ad65c417c8e940066291989d87aaf8cfd457eaeed89a6e51f9a0b5acabdc23cc",
                                  "typeString": "literal_string \"Proof timer has not elapsed\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3247,
                            "name": "Identifier",
                            "src": "19058:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "timestamp",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18350,
                                      "type": "block",
                                      "value": "block"
                                    },
                                    "id": 3248,
                                    "name": "Identifier",
                                    "src": "19079:5:5"
                                  }
                                ],
                                "id": 3249,
                                "name": "MemberAccess",
                                "src": "19079:15:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "add",
                                      "referencedDeclaration": 16749,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "withdrawalRequestTime",
                                          "referencedDeclaration": 3876,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3237,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 3250,
                                            "name": "Identifier",
                                            "src": "19113:2:5"
                                          }
                                        ],
                                        "id": 3251,
                                        "name": "MemberAccess",
                                        "src": "19113:24:5"
                                      }
                                    ],
                                    "id": 3252,
                                    "name": "MemberAccess",
                                    "src": "19113:28:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "getRedemptionProofTimeout",
                                          "referencedDeclaration": 6708,
                                          "type": "function () pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 6757,
                                              "type": "type(library TBTCConstants)",
                                              "value": "TBTCConstants"
                                            },
                                            "id": 3253,
                                            "name": "Identifier",
                                            "src": "19163:13:5"
                                          }
                                        ],
                                        "id": 3254,
                                        "name": "MemberAccess",
                                        "src": "19163:39:5"
                                      }
                                    ],
                                    "id": 3255,
                                    "name": "FunctionCall",
                                    "src": "19163:41:5"
                                  }
                                ],
                                "id": 3256,
                                "name": "FunctionCall",
                                "src": "19113:109:5"
                              }
                            ],
                            "id": 3257,
                            "name": "BinaryOperation",
                            "src": "19079:143:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "50726f6f662074696d657220686173206e6f7420656c6170736564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Proof timer has not elapsed\"",
                              "value": "Proof timer has not elapsed"
                            },
                            "id": 3258,
                            "name": "Literal",
                            "src": "19236:29:5"
                          }
                        ],
                        "id": 3259,
                        "name": "FunctionCall",
                        "src": "19058:217:5"
                      }
                    ],
                    "id": 3260,
                    "name": "ExpressionStatement",
                    "src": "19058:217:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "startLiquidation",
                              "referencedDeclaration": 1957,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3237,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 3261,
                                "name": "Identifier",
                                "src": "19285:2:5"
                              }
                            ],
                            "id": 3263,
                            "name": "MemberAccess",
                            "src": "19285:19:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "66616c7365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "false"
                            },
                            "id": 3264,
                            "name": "Literal",
                            "src": "19305:5:5"
                          }
                        ],
                        "id": 3265,
                        "name": "FunctionCall",
                        "src": "19285:26:5"
                      }
                    ],
                    "id": 3266,
                    "name": "ExpressionStatement",
                    "src": "19285:26:5"
                  }
                ],
                "id": 3267,
                "name": "Block",
                "src": "18920:425:5"
              }
            ],
            "id": 3268,
            "name": "FunctionDefinition",
            "src": "18827:518:5"
          }
        ],
        "id": 3269,
        "name": "ContractDefinition",
        "src": "960:18387:5"
      }
    ],
    "id": 3270,
    "name": "SourceUnit",
    "src": "0:19348:5"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {
        "TBTCConstants": "0xb1cd05843856750cA058965511edfAA9E55cDF02",
        "OutsourceDepositLogging": "0xb131FcDE5910d616C6f36421153f4608b6175Bcb",
        "DepositStates": "0xe79c67D88274e07F0cecB2455DCabe23B304b525",
        "DepositUtils": "0xc9077A33E13422358af7C873188a3E4A3D731A86"
      },
      "address": "0x281CC8FEf4Ef010303640D9d9001Aabd407aB6D5",
      "transactionHash": "0xce57fca1cbdd6131accca85f5ba6b4b189671cb342d0c045c526ef079c0b278d"
    }
  },
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T12:01:17.204Z",
  "networkType": "ethereum",
  "devdoc": {
    "methods": {
      "increaseRedemptionFee(DepositUtils.Deposit storage,bytes8,bytes8)": {
        "details": "This sends us back to AWAITING_WITHDRAWAL_SIGNATURE.",
        "params": {
          "_d": "Deposit storage pointer.",
          "_newOutputValueBytes": "The new output's value.",
          "_previousOutputValueBytes": "The previous output's value."
        }
      },
      "notifyRedemptionProofTimedOut(DepositUtils.Deposit storage)": {
        "details": "This is considered fraud, and is punished.",
        "params": {
          "_d": "Deposit storage pointer."
        }
      },
      "notifyRedemptionSignatureTimedOut(DepositUtils.Deposit storage)": {
        "details": "This is considered fraud, and is punished.",
        "params": {
          "_d": "Deposit storage pointer."
        }
      },
      "provideRedemptionProof(DepositUtils.Deposit storage,bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)": {
        "details": "The signers will be penalized if this is not called.",
        "params": {
          "_bitcoinHeaders": "An array of tightly-packed bitcoin headers.",
          "_d": "Deposit storage pointer.",
          "_merkleProof": "The merkle proof of inclusion of the tx in the bitcoin block.",
          "_txIndexInBlock": "The index of the tx in the Bitcoin block (0-indexed).",
          "_txInputVector": "All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.",
          "_txLocktime": "Final 4 bytes of the transaction.",
          "_txOutputVector": "All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.",
          "_txVersion": "Transaction version number (4-byte LE)."
        }
      },
      "provideRedemptionSignature(DepositUtils.Deposit storage,uint8,bytes32,bytes32)": {
        "details": "The signers will be penalized if this (or provideRedemptionProof) is not called.",
        "params": {
          "_d": "Deposit storage pointer.",
          "_r": "Signature R value.",
          "_s": "Signature S value. Should be in the low half of secp256k1 curve's order.",
          "_v": "Signature recovery value."
        }
      },
      "redemptionTransactionChecks(DepositUtils.Deposit storage,bytes,bytes)": {
        "details": "We only look at the first input and first output. Revert if we find the wrong UTXO or value recipient.                         It's safe to look at only the first input/output as anything that breaks this can be considered fraud                         and can be caught by ECDSAFraudProof.",
        "params": {
          "_d": "Deposit storage pointer.",
          "_txInputVector": "All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.",
          "_txOutputVector": "All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs."
        },
        "return": "The value sent to the redeemer's public key hash."
      },
      "requestRedemption(DepositUtils.Deposit storage,bytes8,bytes)": {
        "details": "The redeemer specifies details about the Bitcoin redemption transaction.",
        "params": {
          "_d": "Deposit storage pointer.",
          "_outputValueBytes": "The 8-byte LE output size.",
          "_redeemerOutputScript": "The redeemer's length-prefixed output script."
        }
      },
      "transferAndRequestRedemption(DepositUtils.Deposit storage,bytes8,bytes,address)": {
        "details": "The redeemer specifies details about the Bitcoin redemption tx and pays for the redemption                             on behalf of _finalRecipient.",
        "params": {
          "_d": "Deposit storage pointer.",
          "_finalRecipient": "The address to receive the TDT and later be recorded as deposit redeemer.",
          "_outputValueBytes": "The 8-byte LE output size.",
          "_redeemerOutputScript": "The redeemer's length-prefixed output script."
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "increaseRedemptionFee(DepositUtils.Deposit storage,bytes8,bytes8)": {
        "notice": "Anyone may notify the contract that a fee bump is needed."
      },
      "notifyRedemptionProofTimedOut(DepositUtils.Deposit storage)": {
        "notice": "Anyone may notify the contract that the signers have failed to produce a redemption proof."
      },
      "notifyRedemptionSignatureTimedOut(DepositUtils.Deposit storage)": {
        "notice": "Anyone may notify the contract that the signers have failed to produce a signature."
      },
      "provideRedemptionProof(DepositUtils.Deposit storage,bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)": {
        "notice": "Anyone may provide a withdrawal proof to prove redemption."
      },
      "provideRedemptionSignature(DepositUtils.Deposit storage,uint8,bytes32,bytes32)": {
        "notice": "Anyone may provide a withdrawal signature if it was requested."
      },
      "redemptionTransactionChecks(DepositUtils.Deposit storage,bytes,bytes)": {
        "notice": "Check the redemption transaction input and output vector to ensure the transaction spends                         the correct UTXO and sends value to the appropriate public key hash."
      },
      "requestRedemption(DepositUtils.Deposit storage,bytes8,bytes)": {
        "notice": "Only TDT holder can request redemption,                             unless Deposit is expired or in COURTESY_CALL."
      },
      "transferAndRequestRedemption(DepositUtils.Deposit storage,bytes8,bytes,address)": {
        "notice": "Anyone can request redemption as long as they can.                             approve the TDT transfer to the final recipient."
      }
    }
  }
}