{
  "contractName": "TestDepositUtils",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_digest",
          "type": "bytes32"
        }
      ],
      "name": "approveDigest",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "auctionValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_redeemer",
          "type": "address"
        }
      ],
      "name": "calculateRedemptionTbtcAmounts",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "collateralizationPercentage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentState",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "exitCourtesyCall",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "fundingInfo",
      "outputs": [
        {
          "internalType": "bytes8",
          "name": "utxoValueBytes",
          "type": "bytes8"
        },
        {
          "internalType": "uint256",
          "name": "fundedAt",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "utxoOutpoint",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getAuctionBasePercentage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getFundingProofTimerStart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLatestRedemptionFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLiquidationAndCourtesyInitiated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLiquidationInitiator",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLiquidationTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_redeemer",
          "type": "address"
        }
      ],
      "name": "getOwnerRedemptionTbtcRequirement",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_redeemer",
          "type": "address"
        }
      ],
      "name": "getRedemptionTbtcRequirement",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRequestInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getSignerFeeDivisor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getSigningGroupPublicKey",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getSigningGroupRequestedAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getState",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getWithdrawalRequestTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "inActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes8",
          "name": "_previousOutputValueBytes",
          "type": "bytes8"
        },
        {
          "internalType": "bytes8",
          "name": "_newOutputValueBytes",
          "type": "bytes8"
        }
      ],
      "name": "increaseRedemptionFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "initialCollateralizedPercent",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ITBTCSystem",
          "name": "_tbtcSystem",
          "type": "address"
        },
        {
          "internalType": "contract TBTCToken",
          "name": "_tbtcToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC721",
          "name": "_tbtcDepositToken",
          "type": "address"
        },
        {
          "internalType": "contract FeeRebateToken",
          "name": "_feeRebateToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_vendingMachineAddress",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "_lotSizeSatoshis",
          "type": "uint64"
        }
      ],
      "name": "initializeDeposit",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "keepAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lotSizeSatoshis",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lotSizeTbtc",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyCourtesyCall",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyCourtesyCallExpired",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyFundingTimedOut",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyRedemptionProofTimedOut",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyRedemptionSignatureTimedOut",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifySignerSetupFailed",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "notifyUndercollateralizedLiquidation",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "performRedemptionTbtcTransfers",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_txVersion",
          "type": "bytes4"
        },
        {
          "internalType": "bytes",
          "name": "_txInputVector",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_txOutputVector",
          "type": "bytes"
        },
        {
          "internalType": "bytes4",
          "name": "_txLocktime",
          "type": "bytes4"
        },
        {
          "internalType": "uint8",
          "name": "_fundingOutputIndex",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "_merkleProof",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_txIndexInBlock",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_bitcoinHeaders",
          "type": "bytes"
        }
      ],
      "name": "provideBTCFundingProof",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_signedDigest",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_preimage",
          "type": "bytes"
        }
      ],
      "name": "provideECDSAFraudProof",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_signedDigest",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_preimage",
          "type": "bytes"
        }
      ],
      "name": "provideFundingECDSAFraudProof",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_txVersion",
          "type": "bytes4"
        },
        {
          "internalType": "bytes",
          "name": "_txInputVector",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_txOutputVector",
          "type": "bytes"
        },
        {
          "internalType": "bytes4",
          "name": "_txLocktime",
          "type": "bytes4"
        },
        {
          "internalType": "bytes",
          "name": "_merkleProof",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_txIndexInBlock",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_bitcoinHeaders",
          "type": "bytes"
        }
      ],
      "name": "provideRedemptionProof",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        }
      ],
      "name": "provideRedemptionSignature",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "purchaseSignerBondsAtAuction",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_txInputVector",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_txOutputVector",
          "type": "bytes"
        }
      ],
      "name": "redemptionTransactionChecks",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "remainingTerm",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_abortOutputScript",
          "type": "bytes"
        }
      ],
      "name": "requestFunderAbort",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes8",
          "name": "_outputValueBytes",
          "type": "bytes8"
        },
        {
          "internalType": "bytes",
          "name": "_redeemerOutputScript",
          "type": "bytes"
        }
      ],
      "name": "requestRedemption",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "reset",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "retrieveSignerPubkey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_digest",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "setDigestApprovedAtTime",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_sys",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tbtcDepositToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_feeRebateToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_vendingMachineAddress",
          "type": "address"
        }
      ],
      "name": "setExteriorAddresses",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes8",
          "name": "_utxoValueBytes",
          "type": "bytes8"
        },
        {
          "internalType": "uint256",
          "name": "_fundedAt",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_utxoOutpoint",
          "type": "bytes"
        }
      ],
      "name": "setFundingInfo",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_fundingProofTimerStart",
          "type": "uint256"
        }
      ],
      "name": "setFundingProofTimerStart",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_initialCollateralizedPercent",
          "type": "uint16"
        }
      ],
      "name": "setInitialCollateralizedPercent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_keepAddress",
          "type": "address"
        }
      ],
      "name": "setKeepAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_fee",
          "type": "uint256"
        }
      ],
      "name": "setKeepSetupFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_latestRedemptionFee",
          "type": "uint256"
        }
      ],
      "name": "setLatestRedemptionFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_liquidation",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_courtesy",
          "type": "uint256"
        }
      ],
      "name": "setLiquidationAndCourtesyInitated",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_initiator",
          "type": "address"
        }
      ],
      "name": "setLiquidationInitiator",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_lotSizeSatoshis",
          "type": "uint64"
        }
      ],
      "name": "setLotSize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_redeemerAddress",
          "type": "address"
        }
      ],
      "name": "setRedeemerAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_redeemerAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_redeemerOutputScript",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_initialRedemptionFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_withdrawalRequestTime",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_lastRequestedDigest",
          "type": "bytes32"
        }
      ],
      "name": "setRequestInfo",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_severelyUndercollateralizedThresholdPercent",
          "type": "uint16"
        }
      ],
      "name": "setSeverelyUndercollateralizedThresholdPercent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_signerFeeDivisor",
          "type": "uint16"
        }
      ],
      "name": "setSignerFeeDivisor",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_x",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_y",
          "type": "bytes32"
        }
      ],
      "name": "setSigningGroupPublicKey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_signingGroupRequestedAt",
          "type": "uint256"
        }
      ],
      "name": "setSigningGroupRequestedAt",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_state",
          "type": "uint8"
        }
      ],
      "name": "setState",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_undercollateralizedThresholdPercent",
          "type": "uint16"
        }
      ],
      "name": "setUndercollateralizedThresholdPercent",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_vendingMachineAddress",
          "type": "address"
        }
      ],
      "name": "setVendingMachineAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "severelyUndercollateralizedThresholdPercent",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "signerFeeTbtc",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bool",
          "name": "_wasFraud",
          "type": "bool"
        }
      ],
      "name": "startLiquidation",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes8",
          "name": "_outputValueBytes",
          "type": "bytes8"
        },
        {
          "internalType": "bytes",
          "name": "_redeemerOutputScript",
          "type": "bytes"
        },
        {
          "internalType": "address payable",
          "name": "_finalRecipient",
          "type": "address"
        }
      ],
      "name": "transferAndRequestRedemption",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "undercollateralizedThresholdPercent",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "utxoValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_digest",
          "type": "bytes32"
        }
      ],
      "name": "wasDigestApprovedForSigning",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "withdrawFunds",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "withdrawableAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentBlockDifficulty",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "previousBlockDifficulty",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_bitcoinHeaders",
          "type": "bytes"
        }
      ],
      "name": "evaluateProofDifficulty",
      "outputs": [],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_signingGroupPubkeyX",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_signingGroupPubkeyY",
          "type": "bytes32"
        }
      ],
      "name": "setPubKey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_txOutputVector",
          "type": "bytes"
        },
        {
          "internalType": "uint8",
          "name": "_fundingOutputIndex",
          "type": "uint8"
        }
      ],
      "name": "findAndParseFundingOutput",
      "outputs": [
        {
          "internalType": "bytes8",
          "name": "",
          "type": "bytes8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "signerFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "signerPubkey",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "signerPKH",
      "outputs": [
        {
          "internalType": "bytes20",
          "name": "",
          "type": "bytes20"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "fetchBitcoinPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "fetchBondAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeRebateTokenHolder",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "redemptionTeardown",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "seizeSignerBonds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "distributeFeeRebate",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_ethValue",
          "type": "uint256"
        }
      ],
      "name": "pushFundsToKeepGroup",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_withdrawer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "enableWithdrawal",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"}],\"name\":\"approveDigest\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"auctionValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_redeemer\",\"type\":\"address\"}],\"name\":\"calculateRedemptionTbtcAmounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"collateralizationPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentBlockDifficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentState\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"distributeFeeRebate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_withdrawer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"enableWithdrawal\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_bitcoinHeaders\",\"type\":\"bytes\"}],\"name\":\"evaluateProofDifficulty\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"exitCourtesyCall\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeRebateTokenHolder\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fetchBitcoinPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fetchBondAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_txOutputVector\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"_fundingOutputIndex\",\"type\":\"uint8\"}],\"name\":\"findAndParseFundingOutput\",\"outputs\":[{\"internalType\":\"bytes8\",\"name\":\"\",\"type\":\"bytes8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundingInfo\",\"outputs\":[{\"internalType\":\"bytes8\",\"name\":\"utxoValueBytes\",\"type\":\"bytes8\"},{\"internalType\":\"uint256\",\"name\":\"fundedAt\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"utxoOutpoint\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAuctionBasePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getFundingProofTimerStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getLatestRedemptionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getLiquidationAndCourtesyInitiated\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getLiquidationInitiator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getLiquidationTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_redeemer\",\"type\":\"address\"}],\"name\":\"getOwnerRedemptionTbtcRequirement\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_redeemer\",\"type\":\"address\"}],\"name\":\"getRedemptionTbtcRequirement\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getRequestInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getSignerFeeDivisor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getSigningGroupPublicKey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getSigningGroupRequestedAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getState\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getWithdrawalRequestTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"inActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes8\",\"name\":\"_previousOutputValueBytes\",\"type\":\"bytes8\"},{\"internalType\":\"bytes8\",\"name\":\"_newOutputValueBytes\",\"type\":\"bytes8\"}],\"name\":\"increaseRedemptionFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialCollateralizedPercent\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ITBTCSystem\",\"name\":\"_tbtcSystem\",\"type\":\"address\"},{\"internalType\":\"contract TBTCToken\",\"name\":\"_tbtcToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC721\",\"name\":\"_tbtcDepositToken\",\"type\":\"address\"},{\"internalType\":\"contract FeeRebateToken\",\"name\":\"_feeRebateToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vendingMachineAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_lotSizeSatoshis\",\"type\":\"uint64\"}],\"name\":\"initializeDeposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"keepAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lotSizeSatoshis\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lotSizeTbtc\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyCourtesyCall\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyCourtesyCallExpired\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyFundingTimedOut\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyRedemptionProofTimedOut\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyRedemptionSignatureTimedOut\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifySignerSetupFailed\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"notifyUndercollateralizedLiquidation\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"performRedemptionTbtcTransfers\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"previousBlockDifficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_txVersion\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"_txInputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_txOutputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"_txLocktime\",\"type\":\"bytes4\"},{\"internalType\":\"uint8\",\"name\":\"_fundingOutputIndex\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"_merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_txIndexInBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_bitcoinHeaders\",\"type\":\"bytes\"}],\"name\":\"provideBTCFundingProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_signedDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_preimage\",\"type\":\"bytes\"}],\"name\":\"provideECDSAFraudProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_signedDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_preimage\",\"type\":\"bytes\"}],\"name\":\"provideFundingECDSAFraudProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_txVersion\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"_txInputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_txOutputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"_txLocktime\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"_merkleProof\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_txIndexInBlock\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_bitcoinHeaders\",\"type\":\"bytes\"}],\"name\":\"provideRedemptionProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"provideRedemptionSignature\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"purchaseSignerBondsAtAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ethValue\",\"type\":\"uint256\"}],\"name\":\"pushFundsToKeepGroup\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"redemptionTeardown\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_txInputVector\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_txOutputVector\",\"type\":\"bytes\"}],\"name\":\"redemptionTransactionChecks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"remainingTerm\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_abortOutputScript\",\"type\":\"bytes\"}],\"name\":\"requestFunderAbort\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes8\",\"name\":\"_outputValueBytes\",\"type\":\"bytes8\"},{\"internalType\":\"bytes\",\"name\":\"_redeemerOutputScript\",\"type\":\"bytes\"}],\"name\":\"requestRedemption\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"reset\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"retrieveSignerPubkey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"seizeSignerBonds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"setDigestApprovedAtTime\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sys\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tbtcDepositToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_feeRebateToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_vendingMachineAddress\",\"type\":\"address\"}],\"name\":\"setExteriorAddresses\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes8\",\"name\":\"_utxoValueBytes\",\"type\":\"bytes8\"},{\"internalType\":\"uint256\",\"name\":\"_fundedAt\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_utxoOutpoint\",\"type\":\"bytes\"}],\"name\":\"setFundingInfo\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fundingProofTimerStart\",\"type\":\"uint256\"}],\"name\":\"setFundingProofTimerStart\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_initialCollateralizedPercent\",\"type\":\"uint16\"}],\"name\":\"setInitialCollateralizedPercent\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keepAddress\",\"type\":\"address\"}],\"name\":\"setKeepAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setKeepSetupFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_latestRedemptionFee\",\"type\":\"uint256\"}],\"name\":\"setLatestRedemptionFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_liquidation\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_courtesy\",\"type\":\"uint256\"}],\"name\":\"setLiquidationAndCourtesyInitated\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_initiator\",\"type\":\"address\"}],\"name\":\"setLiquidationInitiator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_lotSizeSatoshis\",\"type\":\"uint64\"}],\"name\":\"setLotSize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_signingGroupPubkeyX\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_signingGroupPubkeyY\",\"type\":\"bytes32\"}],\"name\":\"setPubKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_redeemerAddress\",\"type\":\"address\"}],\"name\":\"setRedeemerAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_redeemerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_redeemerOutputScript\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_initialRedemptionFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_withdrawalRequestTime\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_lastRequestedDigest\",\"type\":\"bytes32\"}],\"name\":\"setRequestInfo\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_severelyUndercollateralizedThresholdPercent\",\"type\":\"uint16\"}],\"name\":\"setSeverelyUndercollateralizedThresholdPercent\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_signerFeeDivisor\",\"type\":\"uint16\"}],\"name\":\"setSignerFeeDivisor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_y\",\"type\":\"bytes32\"}],\"name\":\"setSigningGroupPublicKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_signingGroupRequestedAt\",\"type\":\"uint256\"}],\"name\":\"setSigningGroupRequestedAt\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_state\",\"type\":\"uint8\"}],\"name\":\"setState\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_undercollateralizedThresholdPercent\",\"type\":\"uint16\"}],\"name\":\"setUndercollateralizedThresholdPercent\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vendingMachineAddress\",\"type\":\"address\"}],\"name\":\"setVendingMachineAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"severelyUndercollateralizedThresholdPercent\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signerFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signerFeeTbtc\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signerPKH\",\"outputs\":[{\"internalType\":\"bytes20\",\"name\":\"\",\"type\":\"bytes20\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signerPubkey\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_wasFraud\",\"type\":\"bool\"}],\"name\":\"startLiquidation\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes8\",\"name\":\"_outputValueBytes\",\"type\":\"bytes8\"},{\"internalType\":\"bytes\",\"name\":\"_redeemerOutputScript\",\"type\":\"bytes\"},{\"internalType\":\"address payable\",\"name\":\"_finalRecipient\",\"type\":\"address\"}],\"name\":\"transferAndRequestRedemption\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"undercollateralizedThresholdPercent\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"utxoValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"}],\"name\":\"wasDigestApprovedForSigning\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdrawFunds\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"withdrawableAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"auctionValue()\":{\"details\":\"This call will revert if the deposit is not in a state where an      auction is currently in progress.\",\"return\":\"The value in wei that would be received in exchange for the         deposit's lot size in TBTC if `purchaseSignerBondsAtAuction`         were called at the time this function is called.\"},\"collateralizationPercentage()\":{\"details\":\"This value represents the percentage of the backing BTC value the      signers currently must hold as bond.\",\"return\":\"The current collateralization level for this deposit.\"},\"currentState()\":{\"details\":\"We implement this because contracts don't handle foreign enums      well. See `DepositStates` for more info on states.\",\"return\":\"The 0-indexed state from the DepositStates enum.\"},\"exitCourtesyCall()\":{\"details\":\"This call will revert if collateral is still below the      undercollateralized threshold according to the price feed.\"},\"fundingInfo()\":{\"details\":\"This call will revert if the deposit is not in a state where the      funding info should be valid. In particular, before funding proof      is successfully submitted (i.e. in states START,      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), none of      these values are set or valid.\",\"return\":\"A tuple of (uxtoValueBytes, fundedAt, uxtoOutpoint).\"},\"getOwnerRedemptionTbtcRequirement(address)\":{\"params\":{\"_redeemer\":\"The assumed owner of the deposit's TDT .\"},\"return\":\"The amount in TBTC needed to redeem the deposit.\"},\"getRedemptionTbtcRequirement(address)\":{\"details\":\"This call will revert if redemption is not possible by _redeemer.\",\"params\":{\"_redeemer\":\"The deposit redeemer whose TBTC requirement is being        requested.\"},\"return\":\"The amount in TBTC needed by the `_redeemer` to redeem the         deposit.\"},\"inActive()\":{\"return\":\"True if state is ACTIVE, false otherwise.\"},\"increaseRedemptionFee(bytes8,bytes8)\":{\"details\":\"This call will revert if the fee is already at its maximum, or if      the new requested fee is not a multiple of the initial requested      fee. Transaction fees can only be bumped by the amount of the      initial requested fee. Calling this sends the deposit back to      the `AWAITING_WITHDRAWAL_SIGNATURE` state and requires the signers      to `provideRedemptionSignature` for the new output value in a      timely fashion.\",\"params\":{\"_newOutputValueBytes\":\"The new output's value.\",\"_previousOutputValueBytes\":\"The previous output's value.\"}},\"initialCollateralizedPercent()\":{\"details\":\"This value represents the percentage of the backing BTC value      the signers hold initially. It is set at creation time.\",\"return\":\"The initial collateralization level for this deposit.\"},\"initialize(address)\":{\"details\":\"Since this function is not access-controlled, it should be called      transactionally with contract instantiation. In cases where a      regular contract directly inherits from DepositFactoryAuthority,      that should happen in the constructor. In cases where the inheritor      is binstead used via a clone factory, the same function that      creates a new clone should also trigger initialization.\"},\"keepAddress()\":{\"details\":\"The keep contract address is saved on Deposit initialization.\",\"return\":\"Address of the Keep contract.\"},\"lotSizeSatoshis()\":{\"return\":\"uint64 lot size in satoshis.\"},\"lotSizeTbtc()\":{\"details\":\"This is the same as lotSizeSatoshis(), but is multiplied to scale      to 18 decimal places.\",\"return\":\"uint256 lot size in TBTC precision (max 18 decimal places).\"},\"notifyCourtesyCall()\":{\"details\":\"This call will revert if the signers are not in fact      undercollateralized according to the price feed. After      TBTCConstants.COURTESY_CALL_DURATION, courtesy call times out and      regular abort liquidation occurs; see      `notifyCourtesyTimedOut`.\"},\"notifyCourtesyCallExpired()\":{\"details\":\"This call will revert if the courtesy call period has not in fact      expired or is not in the courtesy call state. Courtesy call      expiration is treated as an abort, and is handled by seizing signer      bonds and putting them up for auction for the lot size amount in      TBTC (see `purchaseSignerBondsAtAuction`). Emits a      LiquidationStarted event. The caller is captured as the liquidation      initiator, and is eligible for 50% of any bond left after the      auction is completed.\"},\"notifyFundingTimedOut()\":{\"details\":\"This is considered a funder fault, and the funder's payment for      opening the deposit is not refunded. Emits a SetupFailed event.      Reverts if the funding timeout has not yet elapsed, or if the      deposit is not currently awaiting funding proof.\"},\"notifyRedemptionProofTimedOut()\":{\"details\":\"This call will revert if the deposit is not currently awaiting a      signature or if the allotted time has not yet elapsed. This is      considered an abort, and is punished by seizing signer bonds and      putting them up for auction for the lot size amount in TBTC (see      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.      The caller is captured as the liquidation initiator, and      is eligible for 50% of any bond left after the auction is     completed.\"},\"notifyRedemptionSignatureTimedOut()\":{\"details\":\"This is considered an abort, and is punished by seizing signer      bonds and putting them up for auction. Emits a LiquidationStarted      event and a Liquidated event and sends the full signer bond to the      redeemer. Reverts if the deposit is not currently awaiting a      signature or if the allotted time has not yet elapsed. The caller      is captured as the liquidation initiator, and is eligible for 50%      of any bond left after the auction is completed.\"},\"notifySignerSetupFailed()\":{\"details\":\"This is considered a signer fault, and the signers' bonds are used      to make the deposit setup fee available for withdrawal by the TDT      holder as a refund. The remainder of the signers' bonds are      returned to the bonding pool and the signers are released from any      further responsibilities. Reverts if the deposit is not awaiting      signer setup or if the signing group formation timeout has not      elapsed.\"},\"notifyUndercollateralizedLiquidation()\":{\"details\":\"Calls out to the system for oracle info.This call will revert if the signers are not in fact severely      undercollateralized according to the price feed. Severe      undercollateralization is treated as an abort, and is handled by      seizing signer bonds and putting them up for auction in exchange      for the lot size amount in TBTC (see      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.      The caller is captured as the liquidation initiator, and is      eligible for 50% of any bond left after the auction is completed.\"},\"provideBTCFundingProof(bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)\":{\"details\":\"Takes a pre-parsed transaction and calculates values needed to      verify funding.\",\"params\":{\"_bitcoinHeaders\":\"Single bytestring of 80-byte bitcoin headers,        lowest height first.\",\"_fundingOutputIndex\":\"Index of funding output in _txOutputVector        (0-indexed).\",\"_merkleProof\":\"The merkle proof of transaction inclusion in a        block.\",\"_txIndexInBlock\":\"Transaction index in the 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 little-endian).\"}},\"provideECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)\":{\"details\":\"This call will revert if the underlying keep cannot verify that      there was fraud. Fraud is handled by seizing signer bonds and      putting them up for auction in exchange for the lot size amount in      TBTC (see `purchaseSignerBondsAtAuction`). Emits a      LiquidationStarted event. The caller is captured as the liquidation      initiator, and is eligible for any bond left after the auction is      completed.\",\"params\":{\"_preimage\":\"The sha256 preimage of the digest.\",\"_r\":\"Signature R value.\",\"_s\":\"Signature S value.\",\"_signedDigest\":\"The digest signed by the signature (v,r,s) tuple.\",\"_v\":\"Signature recovery value.\"}},\"provideFundingECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)\":{\"details\":\"Calls out to the keep to verify if there was fraud.\",\"params\":{\"_preimage\":\"The sha256 preimage of the digest.\",\"_r\":\"Signature R value.\",\"_s\":\"Signature S value.\",\"_signedDigest\":\"The digest signed by the signature (v,r,s) tuple.\",\"_v\":\"Signature recovery value.\"}},\"provideRedemptionProof(bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)\":{\"details\":\"Takes a pre-parsed transaction and calculates values needed to      verify funding. Signers can have their bonds seized if this is not      called within `TBTCConstants.REDEMPTION_PROOF_TIMEOUT` seconds of      a redemption signature being provided.\",\"params\":{\"_bitcoinHeaders\":\"Single bytestring of 80-byte bitcoin headers,        lowest height first.\",\"_merkleProof\":\"The merkle proof of transaction inclusion in a        block.\",\"_txIndexInBlock\":\"Transaction index in the 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 little-endian).\"}},\"provideRedemptionSignature(uint8,bytes32,bytes32)\":{\"details\":\"The signers will be penalized if this function is not called      correctly within `TBTCConstants.REDEMPTION_SIGNATURE_TIMEOUT`      seconds of a redemption request or fee increase being received.\",\"params\":{\"_r\":\"Signature R value.\",\"_s\":\"Signature S value. Should be in the low half of secp256k1        curve's order.\",\"_v\":\"Signature recovery value.\"}},\"purchaseSignerBondsAtAuction()\":{\"details\":\"The amount of ETH given for the transferred TBTC can be read using      the `auctionValue` function; note, however, that the function's      value is only static during the specific block it is queried, as it      varies by block timestamp.\"},\"remainingTerm()\":{\"details\":\"The value accuracy is not guaranteed since block.timestmap can be      lightly manipulated by miners.\",\"return\":\"The remaining term of the deposit in seconds. 0 if already at         term.\"},\"requestFunderAbort(bytes)\":{\"details\":\"This is a self-admitted funder fault, and is only be callable by      the TDT holder. This function emits the FunderAbortRequested event,      but stores no additional state.\",\"params\":{\"_abortOutputScript\":\"The output script the funder wishes to request        a return of their UTXO to.\"}},\"requestRedemption(bytes8,bytes)\":{\"details\":\"The amount of TBTC needed to redeem can be looked up using the      `getRedemptionTbtcRequirement` or `getOwnerRedemptionTbtcRequirement`      functions.\",\"params\":{\"_outputValueBytes\":\"The 8-byte little-endian output size. The         difference between this value and the lot size of the deposit         will be paid as a fee to the Bitcoin miners when the signed         transaction is broadcast.\",\"_redeemerOutputScript\":\"The redeemer's length-prefixed output         script.\"}},\"retrieveSignerPubkey()\":{\"details\":\"Stores the pubkey as 2 bytestrings, X and Y. Emits a      RegisteredPubkey event with the two components. Reverts if the      deposit is not awaiting signer setup, if the generated public key      is unset or has incorrect length, or if the public key has a 0      X or Y value.\"},\"severelyUndercollateralizedThresholdPercent()\":{\"details\":\"This collateralization level is critical. If the collateralization      level falls below this percentage the Deposit can get liquidated.      This value represents the percentage of the backing BTC value the      signers must hold as bond in order to not be severely      undercollateralized. It is set at creation time. Note that the      value for new deposits in TBTCSystem can be changed by governance,      but the value for a particular deposit is static once the deposit      is created.\",\"return\":\"The severely undercollateralized level for this deposit.\"},\"signerFeeTbtc()\":{\"details\":\"This is the one-time fee required by the signers to perform the      tasks needed to maintain a decentralized and trustless model for      tBTC. It is a percentage of the deposit's lot size.\",\"return\":\"Fee amount in TBTC.\"},\"transferAndRequestRedemption(bytes8,bytes,address)\":{\"details\":\"Performs the same action as requestRedemption, but transfers      ownership of the deposit to the specified _finalRecipient. Used as      a utility helper for the vending machine's shortcut      TBTC->redemption path.\",\"params\":{\"_finalRecipient\":\"The address to receive the TDT and later be recorded as deposit redeemer.\",\"_outputValueBytes\":\"The 8-byte little-endian output size.\",\"_redeemerOutputScript\":\"The redeemer's length-prefixed output script.\"}},\"undercollateralizedThresholdPercent()\":{\"details\":\"This collateralization level is semi-critical. If the      collateralization level falls below this percentage the Deposit can      be courtesy-called by calling `notifyCourtesyCall`. This value      represents the percentage of the backing BTC value the signers must      hold as bond in order to not be undercollateralized. It is set at      creation time. Note that the value for new deposits in TBTCSystem      can be changed by governance, but the value for a particular      deposit is static once the deposit is created.\",\"return\":\"The undercollateralized level for this deposit.\"},\"utxoValue()\":{\"details\":\"This call will revert if the deposit is not in a state where the      UTXO info should be valid. In particular, before funding proof is      successfully submitted (i.e. in states START,      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), this value      would not be valid.\",\"return\":\"The value of the funding UTXO in satoshis.\"},\"withdrawFunds()\":{\"details\":\"Withdrawals can only happen when a contract is in an end-state.\"},\"withdrawableAmount()\":{\"details\":\"Generally ETH is only available to withdraw after the deposit      reaches a closed state. The amount reported is for the sender, and      can be withdrawn using `withdrawFunds` if the deposit is in an end      state.\",\"return\":\"The withdraw allowance in wei.\"}}},\"userdoc\":{\"methods\":{\"auctionValue()\":{\"notice\":\"Calculates the amount of value at auction right now.\"},\"collateralizationPercentage()\":{\"notice\":\"Get the current collateralization level for this Deposit.\"},\"currentState()\":{\"notice\":\"Get the integer representing the current state.\"},\"exitCourtesyCall()\":{\"notice\":\"Notify the contract that the signers' bond value has recovered         enough to be considered sufficiently collateralized.\"},\"fundingInfo()\":{\"notice\":\"Returns information associated with the funding UXTO.\"},\"getOwnerRedemptionTbtcRequirement(address)\":{\"notice\":\"Get TBTC amount required for redemption assuming _redeemer         is this deposit's owner (TDT holder).\"},\"getRedemptionTbtcRequirement(address)\":{\"notice\":\"Get TBTC amount required for redemption by a specified         _redeemer.\"},\"inActive()\":{\"notice\":\"Check if the Deposit is in ACTIVE state.\"},\"increaseRedemptionFee(bytes8,bytes8)\":{\"notice\":\"Anyone may request a signature for a transaction with an         increased Bitcoin transaction fee.\"},\"initialCollateralizedPercent()\":{\"notice\":\"Get the initial collateralization level for this Deposit.\"},\"initialize(address)\":{\"notice\":\"Set the address of the System contract on contract         initialization.\"},\"keepAddress()\":{\"notice\":\"Get the contract address of the BondedECDSAKeep associated with         this Deposit.\"},\"lotSizeSatoshis()\":{\"notice\":\"Get this deposit's BTC lot size in satoshis.\"},\"lotSizeTbtc()\":{\"notice\":\"Get this deposit's lot size in TBTC.\"},\"notifyCourtesyCall()\":{\"notice\":\"Notify the contract that the signers are undercollateralized.\"},\"notifyCourtesyCallExpired()\":{\"notice\":\"Notify the contract that the courtesy period has expired and the         deposit should move into liquidation.\"},\"notifyFundingTimedOut()\":{\"notice\":\"Notify the contract that the funding phase of the deposit has         timed out if `provideBTCFundingProof` is not successfully called         within the allotted time. Any sent BTC is left under control of         the signer group, and the funder can use `requestFunderAbort` to         request an at-signer-discretion return of any BTC sent to a         deposit that has been notified of a funding timeout.\"},\"notifyRedemptionProofTimedOut()\":{\"notice\":\"Notify the contract that the deposit has failed to receive a         redemption proof in the allotted time.\"},\"notifyRedemptionSignatureTimedOut()\":{\"notice\":\"Notify the contract that the signers have failed to produce a         signature for a redemption request in the allotted time.\"},\"notifySignerSetupFailed()\":{\"notice\":\"Notify the contract that signing group setup has timed out if         retrieveSignerPubkey is not successfully called within the         allotted time.\"},\"notifyUndercollateralizedLiquidation()\":{\"notice\":\"Notify the contract that the signers are undercollateralized.\"},\"provideBTCFundingProof(bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)\":{\"notice\":\"Anyone may submit a funding proof to the deposit showing that         a transaction was submitted and sufficiently confirmed on the         Bitcoin chain transferring the deposit lot size's amount of BTC         to the signer-controlled private key corresopnding to this         deposit. This will move the deposit into an active state.\"},\"provideECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)\":{\"notice\":\"Anyone can provide a signature corresponding to the signers'         public key that was not requested to prove fraud. A redemption         request and a redemption fee increase are the only ways to         request a signature from the signers.\"},\"provideFundingECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)\":{\"notice\":\"Anyone can provide a signature corresponding to the signers'         public key to prove fraud during funding. Note that during         funding no signature has been requested from the signers, so         any signature is effectively fraud.\"},\"provideRedemptionProof(bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)\":{\"notice\":\"Anyone may submit a redemption proof to the deposit showing that         a transaction was submitted and sufficiently confirmed on the         Bitcoin chain transferring the deposit lot size's amount of BTC         from the signer-controlled private key corresponding to this         deposit to the requested redemption output script. This will         move the deposit into a redeemed state.\"},\"provideRedemptionSignature(uint8,bytes32,bytes32)\":{\"notice\":\"Anyone may provide a withdrawal signature if it was requested.\"},\"purchaseSignerBondsAtAuction()\":{\"notice\":\"Closes an auction and purchases the signer bonds by transferring         the lot size in TBTC to the redeemer, if there is one, or to the         TDT holder if not. Any bond amount that is not currently up for         auction is either made available for the liquidation initiator         to withdraw (for fraud) or split 50-50 between the initiator and         the signers (for abort or collateralization issues).\"},\"remainingTerm()\":{\"notice\":\"Retrieve the remaining term of the deposit in seconds.\"},\"requestFunderAbort(bytes)\":{\"notice\":\"Requests a funder abort for a failed-funding deposit; that is,         requests the return of a sent UTXO to _abortOutputScript. It         imposes no requirements on the signing group. Signers should         send their UTXO to the requested output script, but do so at         their discretion and with no penalty for failing to do so. This         can be used for example when a UTXO is sent that is the wrong         size for the lot.\"},\"requestRedemption(bytes8,bytes)\":{\"notice\":\"Requests redemption of this deposit, meaning the transmission,         by the signers, of the deposit's UTXO to the specified Bitocin         output script. Requires approving the deposit to spend the         amount of TBTC needed to redeem.\"},\"retrieveSignerPubkey()\":{\"notice\":\"Notify the contract that the ECDSA keep has generated a public         key so the deposit contract can pull it in.\"},\"severelyUndercollateralizedThresholdPercent()\":{\"notice\":\"Get the severe undercollateralization level for this Deposit.\"},\"signerFeeTbtc()\":{\"notice\":\"Get the signer fee for this deposit, in TBTC.\"},\"transferAndRequestRedemption(bytes8,bytes,address)\":{\"notice\":\"This function can only be called by the vending machine.\"},\"undercollateralizedThresholdPercent()\":{\"notice\":\"Get the undercollateralization level for this Deposit.\"},\"utxoValue()\":{\"notice\":\"Get the value of the funding UTXO.\"},\"withdrawFunds()\":{\"notice\":\"Withdraw the ETH balance of the deposit allotted to the caller.\"},\"withdrawableAmount()\":{\"notice\":\"Get caller's ETH withdraw allowance.\"}}}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/test/deposit/TestDepositUtils.sol\":\"TestDepositUtils\"},\"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/Deposit.sol\":{\"keccak256\":\"0x4e25c6bfe874c5254659e99b5d87ad0bd6299468106c8f955e973a0431367dec\",\"urls\":[\"bzz-raw://c54c7e956fee91813946745f23d11062a9dd2c07d916979871f7468509295de4\",\"dweb:/ipfs/QmQ1qFjzq9uY7SmdUqzwNM7z8AAnCbji2joqkJYJSBaJyW\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositFunding.sol\":{\"keccak256\":\"0xe223f4e039e347d3eec8eea8d30d6f87f25ab3f8839e96b5da608c6a012db2c2\",\"urls\":[\"bzz-raw://48435948a4b232a3c610f7ac51e5c87a27aa10f92775bc95cd2068dd07b69a70\",\"dweb:/ipfs/Qmd7PeN1uovU8BqyrPuLkKf4U1DENt9S7hFr6G5cXFamim\"]},\"/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\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/test/deposit/TestDeposit.sol\":{\"keccak256\":\"0x22acde4643eb1ef3c1c64c3b3ab9472f659b4f711234da5d112b5ad70efd6768\",\"urls\":[\"bzz-raw://a917725404b56c24784ba2fb862670a9b3bf295dd15be5db82b535ee64536d9d\",\"dweb:/ipfs/QmXB9NUrHUY5s7dwXVfNp5aUTPaGzC16p6n3q4sBzMzqMB\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/test/deposit/TestDepositUtils.sol\":{\"keccak256\":\"0xdcc53f14ac47c35bb1b06c86e072897103af0afeccd35a4194aec2fb4aae90b5\",\"urls\":[\"bzz-raw://bdd88dcd8cdfff6e982d6b880a9f3c1dd3df059c910a39bd59a87561f274fdf7\",\"dweb:/ipfs/QmW4zFypqyb316NYfjGXPCuLPtngs3uHiCyDTZaLW6wDRq\"]},\"@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": "0x60806040526000805460ff191690553480156200001b57600080fd5b506200003463deadbeef6001600160e01b036200003a16565b620000f4565b6001600160a01b038116620000815760405162461bcd60e51b8152600401808060200182810382526023815260200180620057576023913960400191505060405180910390fd5b60005460ff1615620000c55760405162461bcd60e51b81526004018080602001828103825260258152602001806200577a6025913960400191505060405180910390fd5b6000805460ff196001600160a01b0390931661010002610100600160a81b031990911617919091166001179055565b61565380620001046000396000f3fe60806040526004361061050b5760003560e01c806385df153d11610297578063c415955911610165578063dba49153116100cc578063f5f6deda11610085578063f5f6deda14611d4e578063f603f2eb14611d87578063f97a02fa14611db3578063fb7c592a14611ddc578063fb90da6814611ea9578063fc1e6db214611ebe5761050b565b8063dba4915314611c21578063dd9e995a14611479578063df27eb8914611cd0578063ea3db25014611cfa578063f0cde07e14611d0f578063f21cc71f14611d245761050b565b8063d02fd9581161011e578063d02fd958146115fc578063d459c4161461162f578063d5eef9711461189a578063d826f88f14611966578063d8d023301461197b578063d9f74b0e146119ae5761050b565b8063c41595591461153c578063c4572eb914611575578063c4d66de81461158a578063c6254dba146115bd578063c82ba9dd146115d2578063cfaba010146115e75761050b565b8063994aa93111610209578063b4bd2e7a116101c2578063b4bd2e7a146114a9578063b6104f96146114be578063b6aef06f146114d3578063b7a34a73146114e8578063ba34683914611512578063bcb65607146115275761050b565b8063994aa931146112e5578063a2af0419146113a7578063a6c1691c146113da578063a81e63f7146113ef578063abb3bb7314611446578063b1474a97146114795761050b565b806393c43bd01161025b57806393c43bd014611212578063946626f414611240578063946fbf4c1461126a578063951303f51461127f57806396aab311146112945780639894d734146112a95761050b565b806385df153d1461117757806387a90d801461118c5780638a7e6464146111a157806390a2f687146111cb57806391d165e3146111fd5761050b565b80632d099442116103df5780636e4668be1161034657806375030f9c116102ff57806375030f9c1461076657806376ef551014610f9d5780637a26f05a14610fb25780637be4227f14610fe05780637f6e12161461109b57806384eb69aa146110b05761050b565b80636e4668be14610e145780636ede101114610e29578063725bd32414610e535780637305919914610f04578063735bd9d614610f1957806374f1c69414610f4c5761050b565b80634f706e44116103985780634f706e4414610c5257806356de96db14610c6757806360e98d5914610c9457806368b2bb3514610ca95780636beb29ef14610d755780636c3b011414610dff5761050b565b80632d099442146109b35780633322f9a014610a7f57806335bc0ebe14610bb557806342dbc60a14610bca578063436fd9e614610bfa5780634cb24d4114610c245761050b565b806313f654df11610483578063245dc4c51161043c578063245dc4c51461093557806324600fc31461094a578063259b1ea31461095f578063287b32e5146109745780632b0bc981146109895780632c735daa1461099e5761050b565b806313f654df146108455780631865c57d1461085a57806318e3cde9146108855780631f8e1d6a1461089a578063228a0507146108af57806324315537146108e05761050b565b8063058d3703116104d5578063058d37031461076657806307acd5cb1461078d5780630b3728c3146107a25780630c3f6acf146107d05780630d5889f4146107e55780631209114a146108115761050b565b80621b28031461054a57806249ce7514610581578063022d44b71461063257806303c73ded146106655780630576025214610693575b36156105485760405162461bcd60e51b815260040180806020018281038252603b8152602001806154c7603b913960400191505060405180910390fd5b005b34801561055657600080fd5b5061055f611eee565b604080516bffffffffffffffffffffffff199092168252519081900360200190f35b34801561058d57600080fd5b50610548600480360360208110156105a457600080fd5b810190602081018135600160201b8111156105be57600080fd5b8201836020820111156105d057600080fd5b803590602001918460018302840111600160201b831117156105f157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f74945050505050565b34801561063e57600080fd5b506105486004803603602081101561065557600080fd5b50356001600160a01b031661210f565b34801561067157600080fd5b506105486004803603602081101561068857600080fd5b503561ffff16612131565b34801561069f57600080fd5b50610749600480360360408110156106b657600080fd5b810190602081018135600160201b8111156106d057600080fd5b8201836020820111156106e257600080fd5b803590602001918460018302840111600160201b8311171561070357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff1691506121519050565b604080516001600160c01b03199092168252519081900360200190f35b34801561077257600080fd5b5061077b61224d565b60408051918252519081900360200190f35b34801561079957600080fd5b5061077b6122a1565b3480156107ae57600080fd5b50610548600480360360208110156107c557600080fd5b503561ffff166122b2565b3480156107dc57600080fd5b5061077b6122ca565b3480156107f157600080fd5b506107fa6122da565b6040805161ffff9092168252519081900360200190f35b34801561081d57600080fd5b506105486004803603602081101561083457600080fd5b503567ffffffffffffffff166122eb565b34801561085157600080fd5b5061077b612319565b34801561086657600080fd5b5061086f6122ca565b6040805160ff9092168252519081900360200190f35b34801561089157600080fd5b5061077b612426565b3480156108a657600080fd5b5061054861247a565b3480156108bb57600080fd5b506108c4612486565b604080516001600160a01b039092168252519081900360200190f35b3480156108ec57600080fd5b50610548600480360360a081101561090357600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608090910135166124da565b34801561094157600080fd5b5061077b612539565b34801561095657600080fd5b5061054861253f565b34801561096b57600080fd5b50610548612549565b34801561098057600080fd5b506105486125b5565b34801561099557600080fd5b50610548612607565b3480156109aa57600080fd5b50610548612659565b3480156109bf57600080fd5b50610548600480360360a08110156109d657600080fd5b60ff8235169160208101359160408201359160608101359181019060a081016080820135600160201b811115610a0b57600080fd5b820183602082011115610a1d57600080fd5b803590602001918460018302840111600160201b83111715610a3e57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506126ab945050505050565b348015610a8b57600080fd5b5061077b60048036036040811015610aa257600080fd5b810190602081018135600160201b811115610abc57600080fd5b820183602082011115610ace57600080fd5b803590602001918460018302840111600160201b83111715610aef57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610b4157600080fd5b820183602082011115610b5357600080fd5b803590602001918460018302840111600160201b83111715610b7457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506127ac945050505050565b348015610bc157600080fd5b5061077b6128d1565b348015610bd657600080fd5b5061054860048036036040811015610bed57600080fd5b5080359060200135612925565b348015610c0657600080fd5b5061054860048036036020811015610c1d57600080fd5b5035612930565b348015610c3057600080fd5b50610c39612944565b6040805192835260208301919091528051918290030190f35b348015610c5e57600080fd5b5061054861294e565b348015610c7357600080fd5b5061054860048036036020811015610c8a57600080fd5b503560ff166129a0565b348015610ca057600080fd5b5061077b6129c0565b348015610cb557600080fd5b50610548600480360360a0811015610ccc57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610cf657600080fd5b820183602082011115610d0857600080fd5b803590602001918460018302840111600160201b83111715610d2957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602081013590604001356129d1565b348015610d8157600080fd5b50610d8a612a10565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610dc4578181015183820152602001610dac565b50505050905090810190601f168015610df15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e0b57600080fd5b506108c4612b54565b348015610e2057600080fd5b5061077b612b63565b348015610e3557600080fd5b5061054860048036036020811015610e4c57600080fd5b5035612bb7565b348015610e5f57600080fd5b5061054860048036036020811015610e7657600080fd5b810190602081018135600160201b811115610e9057600080fd5b820183602082011115610ea257600080fd5b803590602001918460018302840111600160201b83111715610ec357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612bbc945050505050565b348015610f1057600080fd5b5061077b612c28565b348015610f2557600080fd5b5061054860048036036020811015610f3c57600080fd5b50356001600160a01b0316612c2e565b348015610f5857600080fd5b50610f7f60048036036020811015610f6f57600080fd5b50356001600160a01b0316612c50565b60408051938452602084019290925282820152519081900360600190f35b348015610fa957600080fd5b506107fa612c73565b348015610fbe57600080fd5b5061054860048036036020811015610fd557600080fd5b503561ffff16612c7d565b348015610fec57600080fd5b50610ff5612c9f565b60405180866001600160a01b03166001600160a01b0316815260200180602001858152602001848152602001838152602001828103825286818151815260200191508051906020019080838360005b8381101561105c578181015183820152602001611044565b50505050905090810190601f1680156110895780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3480156110a757600080fd5b5061077b612d69565b3480156110bc57600080fd5b50610548600480360360608110156110d357600080fd5b6001600160c01b031982351691602081013591810190606081016040820135600160201b81111561110357600080fd5b82018360208201111561111557600080fd5b803590602001918460018302840111600160201b8311171561113657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612dbd945050505050565b34801561118357600080fd5b506107fa612dec565b34801561119857600080fd5b5061077b612dfc565b3480156111ad57600080fd5b50610548600480360360208110156111c457600080fd5b5035612f0a565b3480156111d757600080fd5b506111e0612f1b565b6040805167ffffffffffffffff9092168252519081900360200190f35b34801561120957600080fd5b50610548612f32565b34801561121e57600080fd5b506105486004803603602081101561123557600080fd5b503561ffff16612f84565b34801561124c57600080fd5b506105486004803603602081101561126357600080fd5b5035612fa7565b34801561127657600080fd5b5061077b612fac565b34801561128b57600080fd5b5061077b613000565b3480156112a057600080fd5b5061054861300c565b3480156112b557600080fd5b50610548600480360360408110156112cc57600080fd5b506001600160c01b03198135811691602001351661305e565b3480156112f157600080fd5b506105486004803603604081101561130857600080fd5b6001600160c01b03198235169190810190604081016020820135600160201b81111561133357600080fd5b82018360208201111561134557600080fd5b803590602001918460018302840111600160201b8311171561136657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506130e4945050505050565b3480156113b357600080fd5b50610548600480360360208110156113ca57600080fd5b50356001600160a01b03166131b6565b3480156113e657600080fd5b5061077b6131d8565b610548600480360360c081101561140557600080fd5b5080356001600160a01b03908116916020810135821691604082013581169160608101358216916080820135169060a0013567ffffffffffffffff1661322c565b34801561145257600080fd5b506105486004803603602081101561146957600080fd5b50356001600160a01b0316613304565b34801561148557600080fd5b506105486004803603604081101561149c57600080fd5b5080359060200135613326565b3480156114b557600080fd5b50610548613331565b3480156114ca57600080fd5b5061077b613383565b3480156114df57600080fd5b5061077b613389565b3480156114f457600080fd5b5061077b6004803603602081101561150b57600080fd5b503561338f565b34801561151e57600080fd5b5061054861341f565b34801561153357600080fd5b50610548613471565b34801561154857600080fd5b506105486004803603606081101561155f57600080fd5b5060ff813516906020810135906040013561347b565b34801561158157600080fd5b5061077b613501565b34801561159657600080fd5b50610548600480360360208110156115ad57600080fd5b50356001600160a01b031661350d565b3480156115c957600080fd5b50610c396135c3565b3480156115de57600080fd5b5061077b6135cd565b3480156115f357600080fd5b506105486135d3565b34801561160857600080fd5b5061077b6004803603602081101561161f57600080fd5b50356001600160a01b0316613625565b34801561163b57600080fd5b50610548600480360360e081101561165257600080fd5b6001600160e01b03198235169190810190604081016020820135600160201b81111561167d57600080fd5b82018360208201111561168f57600080fd5b803590602001918460018302840111600160201b831117156116b057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561170257600080fd5b82018360208201111561171457600080fd5b803590602001918460018302840111600160201b8311171561173557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b0319853516959094909350604081019250602001359050600160201b81111561179957600080fd5b8201836020820111156117ab57600080fd5b803590602001918460018302840111600160201b831117156117cc57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561182657600080fd5b82018360208201111561183857600080fd5b803590602001918460018302840111600160201b8311171561185957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613644945050505050565b3480156118a657600080fd5b50610548600480360360a08110156118bd57600080fd5b60ff8235169160208101359160408201359160608101359181019060a081016080820135600160201b8111156118f257600080fd5b82018360208201111561190457600080fd5b803590602001918460018302840111600160201b8311171561192557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613886945050505050565b34801561197257600080fd5b50610548613918565b34801561198757600080fd5b5061077b6004803603602081101561199e57600080fd5b50356001600160a01b0316613991565b3480156119ba57600080fd5b5061054860048036036101008110156119d257600080fd5b6001600160e01b03198235169190810190604081016020820135600160201b8111156119fd57600080fd5b820183602082011115611a0f57600080fd5b803590602001918460018302840111600160201b83111715611a3057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115611a8257600080fd5b820183602082011115611a9457600080fd5b803590602001918460018302840111600160201b83111715611ab557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b03198535169560ff60208701351695919450925060608101915060400135600160201b811115611b2057600080fd5b820183602082011115611b3257600080fd5b803590602001918460018302840111600160201b83111715611b5357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b811115611bad57600080fd5b820183602082011115611bbf57600080fd5b803590602001918460018302840111600160201b83111715611be057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506139a6945050505050565b348015611c2d57600080fd5b50611c36613bf6565b60405180846001600160c01b0319166001600160c01b031916815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611c93578181015183820152602001611c7b565b50505050905090810190601f168015611cc05780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015611cdc57600080fd5b5061054860048036036020811015611cf357600080fd5b5035613d5c565b348015611d0657600080fd5b50610548613d61565b348015611d1b57600080fd5b5061077b613db3565b348015611d3057600080fd5b5061054860048036036020811015611d4757600080fd5b5035613e07565b348015611d5a57600080fd5b5061054860048036036040811015611d7157600080fd5b506001600160a01b038135169060200135613e0c565b348015611d9357600080fd5b5061054860048036036020811015611daa57600080fd5b50351515613e22565b348015611dbf57600080fd5b50611dc8613e33565b604080519115158252519081900360200190f35b348015611de857600080fd5b5061054860048036036060811015611dff57600080fd5b6001600160c01b03198235169190810190604081016020820135600160201b811115611e2a57600080fd5b820183602082011115611e3c57600080fd5b803590602001918460018302840111600160201b83111715611e5d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150613e879050565b348015611eb557600080fd5b506108c4613fae565b348015611eca57600080fd5b5061054860048036036040811015611ee157600080fd5b5080359060200135613fbd565b6000600173__DepositUtils__________________________63e0dfd81a90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b505af4158015611f56573d6000803e3d6000fd5b505050506040513d6020811015611f6c57600080fd5b505190505b90565b6040805163ad91ce1f60e01b8152600160048201529051339173__DepositUtils__________________________9163ad91ce1f91602480820192602092909190829003018186803b158015611fc957600080fd5b505af4158015611fdd573d6000803e3d6000fd5b505050506040513d6020811015611ff357600080fd5b50516001600160a01b03161461203a5760405162461bcd60e51b81526004018080602001828103825260288152602001806155026028913960400191505060405180910390fd5b60408051635f3c5d8960e01b81526001600482018181526024830193845284516044840152845173__DepositFunding________________________94635f3c5d8994879392606490910190602085019080838360005b838110156120a9578181015183820152602001612091565b50505050905090810190601f1680156120d65780820380516001836020036101000a031916815260200191505b50935050505060006040518083038186803b1580156120f457600080fd5b505af4158015612108573d6000803e3d6000fd5b5050505050565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6006805461ffff909216620100000263ffff000019909216919091179055565b60405162793f2d60e51b815260016004820181815260ff8416604484015260606024840190815285516064850152855160009473__DepositUtils__________________________94630f27e5a0949093899389936084019060208601908083838d5b838110156121cc5781810151838201526020016121b4565b50505050905090810190601f1680156121f95780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b15801561221857600080fd5b505af415801561222c573d6000803e3d6000fd5b505050506040513d602081101561224257600080fd5b505190505b92915050565b6000600173__DepositUtils__________________________63a880784890916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b60006122ad6001613fcf565b905090565b6006805461ffff191661ffff92909216919091179055565b600554600160e01b900460ff1690565b600654600160201b900461ffff1690565b6005805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b6000600173__DepositStates_________________________63fb0611ff90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561236d57600080fd5b505af4158015612381573d6000803e3d6000fd5b505050506040513d602081101561239757600080fd5b50516123d45760405162461bcd60e51b81526004018080602001828103825260298152602001806155f66029913960400191505060405180910390fd5b604080516350ef3aa160e01b815260016004820152905173__DepositUtils__________________________916350ef3aa1916024808301926020929190829003018186803b158015611f4257600080fd5b6000600173__DepositUtils__________________________632fac808a90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b61248460016140a3565b565b6000600173__DepositUtils__________________________631bf7ad3190916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b600180546001600160a01b03199081166001600160a01b03978816179091556002805482169587169590951790945560038054851693861693909317909255600480548416918516919091179055600580549092169216919091179055565b600d5490565b61248460016141e1565b6040805163426e16c160e01b815260016004820152905173__DepositFunding________________________9163426e16c1916024808301926000929190829003018186803b15801561259b57600080fd5b505af41580156125af573d6000803e3d6000fd5b50505050565b6040805163077aceb960e31b815260016004820152905173__DepositLiquidation____________________91633bd675c8916024808301926000929190829003018186803b15801561259b57600080fd5b6040805163439b7be160e11b815260016004820152905173__DepositRedemption_____________________91638736f7c2916024808301926000929190829003018186803b15801561259b57600080fd5b60408051631754228360e11b815260016004820152905173__DepositLiquidation____________________91632ea84506916024808301926000929190829003018186803b15801561259b57600080fd5b600173__DepositFunding________________________63fb12d9df909187878787876040518763ffffffff1660e01b8152600401808781526020018660ff1660ff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561273e578181015183820152602001612726565b50505050905090810190601f16801561276b5780820380516001836020036101000a031916815260200191505b5097505050505050505060006040518083038186803b15801561278d57600080fd5b505af41580156127a1573d6000803e3d6000fd5b505050505050505050565b6000600173__DepositRedemption_____________________63936b9ac5909185856040518463ffffffff1660e01b8152600401808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561282457818101518382015260200161280c565b50505050905090810190601f1680156128515780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561288457818101518382015260200161286c565b50505050905090810190601f1680156128b15780820380516001836020036101000a031916815260200191505b509550505050505060206040518083038186803b15801561221857600080fd5b6000600173__DepositUtils__________________________6391f88c8590916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b600891909155600955565b61294160018263ffffffff6143fe16565b50565b6008546009549091565b604080516361f036d360e01b815260016004820152905173__DepositFunding________________________916361f036d3916024808301926000929190829003018186803b15801561259b57600080fd5b6005805460ff909216600160e01b0260ff60e01b19909216919091179055565b600554600160e81b900461ffff1690565b601080546001600160a01b0319166001600160a01b03871617905583516129ff90601190602087019061539e565b506012929092556014556015555050565b6060600173__DepositUtils__________________________63db08d91990916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015612a6457600080fd5b505af4158015612a78573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612aa157600080fd5b8101908080516040519392919084600160201b821115612ac057600080fd5b908301906020820185811115612ad557600080fd5b8251600160201b811182820188101715612aee57600080fd5b82525081516020918201929091019080838360005b83811015612b1b578181015183820152602001612b03565b50505050905090810190601f168015612b485780820380516001836020036101000a031916815260200191505b50604052505050905090565b600b546001600160a01b031690565b6000600173__DepositLiquidation____________________63e86e97b690916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b601355565b60408051635c7b82d760e01b81526001600482018181526024830193845284516044840152845173__DepositUtils__________________________94635c7b82d7948793926064909101906020850190808383600083156120a9578181015183820152602001612091565b60145490565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008080612c666001858363ffffffff61447b16565b9250925092509193909250565b60065461ffff1690565b6005805461ffff909216600160e81b0261ffff60e81b19909216919091179055565b6010546012546014546015546011805460408051602060026101006001861615026000190190941693909304601f81018490048402820184019092528181526000976060978997889788976001600160a01b039094169693959294919390928691830182828015612d515780601f10612d2657610100808354040283529160200191612d51565b820191906000526020600020905b815481529060010190602001808311612d3457829003601f168201915b50505050509350945094509450945094509091929394565b6000600173__DepositUtils__________________________6368c2bd8690916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b6016805467ffffffffffffffff191660c085901c179055601782905580516125af90601890602084019061539e565b60065462010000900461ffff1690565b6000600173__DepositStates_________________________6348312fa390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612e5057600080fd5b505af4158015612e64573d6000803e3d6000fd5b505050506040513d6020811015612e7a57600080fd5b505115612eb85760405162461bcd60e51b81526004018080602001828103825260418152602001806154376041913960600191505060405180910390fd5b60408051631ec664f560e21b815260016004820152905173__DepositUtils__________________________91637b1993d4916024808301926020929190829003018186803b158015611f4257600080fd5b61294160018263ffffffff6146f216565b600554600160a01b900467ffffffffffffffff1690565b60408051634e40547560e11b815260016004820152905173__DepositLiquidation____________________91639c80a8ea916024808301926000929190829003018186803b15801561259b57600080fd5b6006805461ffff909216600160201b0265ffff0000000019909216919091179055565b600d55565b6000600173__DepositUtils__________________________637949c2d290916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b60006122ad60016147b7565b6040805163a221542160e01b815260016004820152905173__DepositLiquidation____________________9163a2215421916024808301926000929190829003018186803b15801561259b57600080fd5b60408051632d0c21bf60e01b8152600160048201526001600160c01b0319808516602483015283166044820152905173__DepositRedemption_____________________91632d0c21bf916064808301926000929190829003018186803b1580156130c857600080fd5b505af41580156130dc573d6000803e3d6000fd5b505050505050565b604051632cac94ef60e01b81526001600482018181526001600160c01b03198516602484015260606044840190815284516064850152845173__DepositRedemption_____________________94632cac94ef94938893889391929091608490910190602085019080838360005b8381101561316a578181015183820152602001613152565b50505050905090810190601f1680156131975780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038186803b1580156130c857600080fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000600173__DepositUtils__________________________63fa067d9290916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b600180546001600160a01b03199081166001600160a01b03898116919091178355600280548316898316179055600380548316888316179055600480548316878316178155600580549093169186169190911790915560408051632851e9dd60e01b81529182019290925267ffffffffffffffff83166024820152905173__DepositFunding________________________91632851e9dd916044808301926000929190829003018186803b1580156132e457600080fd5b505af41580156132f8573d6000803e3d6000fd5b50505050505050505050565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600e91909155600f55565b604080516324e8e19960e21b815260016004820152905173__DepositLiquidation____________________916393a38664916024808301926000929190829003018186803b15801561259b57600080fd5b60085490565b60135490565b6000600173__DepositUtils__________________________631129a8a99091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156133eb57600080fd5b505af41580156133ff573d6000803e3d6000fd5b505050506040513d602081101561341557600080fd5b505190505b919050565b604080516304bfa27760e01b815260016004820152905173__DepositRedemption_____________________916304bfa277916024808301926000929190829003018186803b15801561259b57600080fd5b61248460016147ce565b60408051631e3435d560e11b81526001600482015260ff851660248201526044810184905260648101839052905173__DepositRedemption_____________________91633c686baa916084808301926000929190829003018186803b1580156134e457600080fd5b505af41580156134f8573d6000803e3d6000fd5b50505050505050565b60006122ad6001614b33565b6001600160a01b0381166135525760405162461bcd60e51b81526004018080602001828103825260238152602001806154786023913960400191505060405180910390fd5b60005460ff16156135945760405162461bcd60e51b81526004018080602001828103825260258152602001806155d16025913960400191505060405180910390fd5b6000805460ff196001600160a01b0390931661010002610100600160a81b031990911617919091166001179055565b600e54600f549091565b600c5490565b6040805163288ac18560e21b815260016004820152905173__DepositUtils__________________________9163a22b0614916024808301926000929190829003018186803b15801561259b57600080fd5b60008061363a6001848363ffffffff61447b16565b5090949350505050565b604051636c7e2b9d60e01b81526001600482018181526001600160e01b0319808b1660248501528716608484015260c48301859052610100604484019081528951610104850152895173__DepositRedemption_____________________94636c7e2b9d94938d938d938d938d938d938d938d93606481019160a482019160e48101916101249091019060208d019080838360005b838110156136f15781810151838201526020016136d9565b50505050905090810190601f16801561371e5780820380516001836020036101000a031916815260200191505b5085810384528a5181528a516020918201918c019080838360005b83811015613751578181015183820152602001613739565b50505050905090810190601f16801561377e5780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b838110156137b1578181015183820152602001613799565b50505050905090810190601f1680156137de5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b838110156138115781810151838201526020016137f9565b50505050905090810190601f16801561383e5780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060006040518083038186803b15801561386557600080fd5b505af4158015613879573d6000803e3d6000fd5b5050505050505050505050565b600173__DepositLiquidation____________________634941676c909187878787876040518763ffffffff1660e01b8152600401808781526020018660ff1660ff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360008381101561273e578181015183820152602001612726565b61392260006129a0565b61392d600080612925565b60408051602081019091526000808252613949918180806129d1565b613968600060c01b600060405180602001604052806000815250612dbd565b613972600061210f565b61397c6000613d5c565b6139866000612fa7565b612484600080613326565b60008061363a6001848163ffffffff61447b16565b60405163d745519360e01b81526001600482018181526001600160e01b0319808c1660248501528816608484015260ff871660a484015260e48301859052610120604484019081528a516101248501528a5173__DepositFunding________________________9463d745519394938e938e938e938e938e938e938e938e939291606482019160c4810191610104820191610144019060208e019080838360005b83811015613a5f578181015183820152602001613a47565b50505050905090810190601f168015613a8c5780820380516001836020036101000a031916815260200191505b5085810384528b5181528b516020918201918d019080838360005b83811015613abf578181015183820152602001613aa7565b50505050905090810190601f168015613aec5780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b83811015613b1f578181015183820152602001613b07565b50505050905090810190601f168015613b4c5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015613b7f578181015183820152602001613b67565b50505050905090810190601f168015613bac5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060006040518083038186803b158015613bd457600080fd5b505af4158015613be8573d6000803e3d6000fd5b505050505050505050505050565b6000806060600173__DepositStates_________________________6348312fa390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613c4d57600080fd5b505af4158015613c61573d6000803e3d6000fd5b505050506040513d6020811015613c7757600080fd5b505115613cb55760405162461bcd60e51b81526004018080602001828103825260418152602001806154376041913960600191505060405180910390fd5b60165460175460188054604080516020601f6002600019600187161561010002019095169490940493840181900481028201810190925282815260c09590951b94918391830182828015613d4a5780601f10613d1f57610100808354040283529160200191613d4a565b820191906000526020600020905b815481529060010190602001808311613d2d57829003601f168201915b50505050509050925092509250909192565b600c55565b60408051632ec8740960e21b815260016004820152905173__DepositFunding________________________9163bb21d024916024808301926000929190829003018186803b15801561259b57600080fd5b6000600173__DepositUtils__________________________638fdd038890916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b600755565b613e1e6001838363ffffffff614b5216565b5050565b61294160018263ffffffff614b9e16565b6000600173__DepositStates_________________________630f2c635590916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b6005546001600160a01b03163314613ed05760405162461bcd60e51b815260040180806020018281038252603e815260200180615593603e913960400191505060405180910390fd5b604051630d806ee760e41b81526001600482018181526001600160c01b0319861660248401526001600160a01b038416606484015260806044840190815285516084850152855173__DepositRedemption_____________________9463d806ee70949389938993899360a40190602086019080838360005b83811015613f61578181015183820152602001613f49565b50505050905090810190601f168015613f8e5780820380516001836020036101000a031916815260200191505b509550505050505060006040518083038186803b1580156134e457600080fd5b600a546001600160a01b031690565b6000918252601a602052604090912055565b600a810154604080516307acd5cb60e01b8152905160009247926001600160a01b039091169182916307acd5cb916004808301928892919082900301818387803b15801561401c57600080fd5b505af1158015614030573d6000803e3d6000fd5b50479250505082811161408a576040805162461bcd60e51b815260206004820152601d60248201527f4e6f2066756e64732072656365697665642c20756e6578706563746564000000604482015290519081900360640190fd5b61409a818463ffffffff614f0416565b95945050505050565b60006140ae82614f61565b90506001600160a01b0381166140c45750612941565b6140cd82615045565b6001830154604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561411a57600080fd5b505afa15801561412e573d6000803e3d6000fd5b505050506040513d602081101561414457600080fd5b505110613e1e5760018201546001600160a01b031663a9059cbb8261416885615045565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156141b757600080fd5b505af11580156141cb573d6000803e3d6000fd5b505050506040513d60208110156125af57600080fd5b336000908152601882016020908152604091829020548251635a33257560e01b8152600481018590529251909273__DepositStates_________________________92635a33257592602480840193829003018186803b15801561424457600080fd5b505af4158015614258573d6000803e3d6000fd5b505050506040513d602081101561426e57600080fd5b50516142c1576040805162461bcd60e51b815260206004820152601b60248201527f436f6e7472616374206e6f7420796574207465726d696e617465640000000000604482015290519081900360640190fd5b6000811161430c576040805162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b80471015614361576040805162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e6365000000604482015290519081900360640190fd5b3360008181526018840160205260408082208290555190919083908381818185875af1925050503d80600081146143b4576040519150601f19603f3d011682016040523d82523d6000602084013e6143b9565b606091505b50509050806143f95760405162461bcd60e51b815260040180806020018281038252602c81526020018061549b602c913960400191505060405180910390fd5b505050565b600a8201546040805163799cd33360e01b81526004810184905290516001600160a01b039092169163799cd3339160248082019260009290919082900301818387803b15801561444d57600080fd5b505af1158015614461573d6000803e3d6000fd5b505050600091825250601990910160205260409020429055565b60008060008084806144a65750856001600160a01b031661449b88615071565b6001600160a01b0316145b90506000806144b4896150d2565b11801561453b57508773__DepositStates_________________________63761275bf90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561450d57600080fd5b505af4158015614521573d6000803e3d6000fd5b505050506040513d602081101561453757600080fd5b5051155b90508180614547575080155b6145825760405162461bcd60e51b815260040180806020018281038252604881526020018061552a6048913960600191505060405180910390fd5b60008061458e8a614f61565b6001600160a01b0316141590506000886001600160a01b03166145b08b614f61565b6001600160a01b031614905060006145c78b615045565b905060006145d88286868987615184565b90506145fc816145f06145ea8f6151d2565b89615263565b9063ffffffff61527a16565b60018d0154604080516370a0823160e01b81523060048201529051929b506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561464f57600080fd5b505afa158015614663573d6000803e3d6000fd5b505050506040513d602081101561467957600080fd5b50519050808a111561469c576146958a8263ffffffff614f0416565b99506146a1565b600099505b8580156146ab5750845b80156146b5575083155b156146be578297505b6146e0886146d48581858f63ffffffff61527a16565b9063ffffffff614f0416565b98505050505050505093509350939050565b80471015614747576040805162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f7567682066756e647320746f2073656e640000000000000000604482015290519081900360640190fd5b8015613e1e57600a82015460408051631bb457e560e21b815290516001600160a01b03909216918291636ed15f9491859160048082019260009290919082900301818588803b15801561479957600080fd5b505af11580156147ad573d6000803e3d6000fd5b5050505050505050565b336000908152601882016020526040902054919050565b60008173__DepositUtils__________________________63ad91ce1f90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561482157600080fd5b505af4158015614835573d6000803e3d6000fd5b505050506040513d602081101561484b57600080fd5b505160408051631bf7ad3160e01b815260048101859052905191925060009173__DepositUtils__________________________91631bf7ad31916024808301926020929190829003018186803b1580156148a557600080fd5b505af41580156148b9573d6000803e3d6000fd5b505050506040513d60208110156148cf57600080fd5b50516004840154600f8501549192506001600160a01b039081169160009182918291614904918991168363ffffffff61447b16565b91945092509050821561499a576001870154604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561496d57600080fd5b505af1158015614981573d6000803e3d6000fd5b505050506040513d602081101561499757600080fd5b50505b8115614aab57836001600160a01b0316866001600160a01b03161415614a2657600187015460408051630852cd8d60e31b81526004810185905290516001600160a01b03909216916342966c689160248082019260009290919082900301818387803b158015614a0957600080fd5b505af1158015614a1d573d6000803e3d6000fd5b50505050614aab565b60018701546040805163a9059cbb60e01b81526001600160a01b038981166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015614a7e57600080fd5b505af1158015614a92573d6000803e3d6000fd5b505050506040513d6020811015614aa857600080fd5b50505b80156134f85760018701546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015614b0957600080fd5b505af1158015614b1d573d6000803e3d6000fd5b505050506040513d60208110156127a157600080fd5b6005810154600090612247906127109061ffff1663ffffffff6152db16565b6001600160a01b0382166000908152601884016020526040902054614b7d908263ffffffff61527a16565b6001600160a01b039092166000908152601890930160205250604090912055565b60408051630b97468760e31b8152600481018490528215156024820152905173__OutsourceDepositLogging_______________91635cba3438916044808301926000929190829003018186803b158015614bf857600080fd5b505af4158015614c0c573d6000803e3d6000fd5b505050506000614c1b83613fcf565b600f8401546040805163288ac18560e21b81526004810187905290519293506001600160a01b039091169173__DepositUtils__________________________9163a22b0614916024808301926000929190829003018186803b158015614c8157600080fd5b505af4158015614c95573d6000803e3d6000fd5b505050508373__DepositStates_________________________63e0dfa4b390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015614cea57600080fd5b505af4158015614cfe573d6000803e3d6000fd5b505050506040513d6020811015614d1457600080fd5b50518015614d1f5750825b15614e11578373__DepositStates_________________________63056256a890916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015614d7557600080fd5b505af4158015614d89573d6000803e3d6000fd5b50614da192508691508390508463ffffffff614b5216565b8373__OutsourceDepositLogging_______________6332e42f2d90916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015614df257600080fd5b505af4158015614e06573d6000803e3d6000fd5b505050505050613e1e565b6009840180546001600160a01b031916331790554260078501558215614e9f578373__DepositStates_________________________63c28eab4090916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015614e8257600080fd5b505af4158015614e96573d6000803e3d6000fd5b505050506125af565b8373__DepositStates_________________________635dd33d9990916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015614ef057600080fd5b505af41580156147ad573d6000803e3d6000fd5b600082821115614f5b576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600381015460408051634f558e7960e01b8152306004820152905160009283926001600160a01b0390911691634f558e7991602480820192602092909190829003018186803b158015614fb357600080fd5b505afa158015614fc7573d6000803e3d6000fd5b505050506040513d6020811015614fdd57600080fd5b505115612247576003830154604080516331a9108f60e11b815230600482015290516001600160a01b0390921691636352211e91602480820192602092909190829003018186803b15801561503157600080fd5b505afa15801561222c573d6000803e3d6000fd5b600481015460009061224790600160e81b900461ffff16615065846151d2565b9063ffffffff6152db16565b6002810154604080516331a9108f60e11b815230600482015290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b1580156150be57600080fd5b505afa1580156133ff573d6000803e3d6000fd5b60008061515973__TBTCConstants_________________________63d565d1f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561511c57600080fd5b505af4158015615130573d6000803e3d6000fd5b505050506040513d602081101561514657600080fd5b505160168501549063ffffffff61527a16565b90508042101561517b57615173814263ffffffff614f0416565b91505061341a565b50600092915050565b6000808580156151915750845b801561519b575082155b9050600086806151a85750855b806151b05750845b9050600081156151bd5788015b82156151c65788015b98975050505050505050565b600061224773__TBTCConstants_________________________63ae9eb1276040518163ffffffff1660e01b815260040160206040518083038186803b15801561521b57600080fd5b505af415801561522f573d6000803e3d6000fd5b505050506040513d602081101561524557600080fd5b50516004840154600160a01b900467ffffffffffffffff1690615345565b6000811561527357506000612247565b5090919050565b6000828201838110156152d4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000808211615331576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161533c57fe5b04949350505050565b60008261535457506000612247565b8282028284828161536157fe5b04146152d45760405162461bcd60e51b81526004018080602001828103825260218152602001806155726021913960400191505060405180910390fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106153df57805160ff191683800117855561540c565b8280016001018555821561540c579182015b8281111561540c5782518255916020019190600101906153f1565b5061541892915061541c565b5090565b611f7191905b80821115615418576000815560010161542256fe4465706f73697420686173206e6f7420796574206265656e2066756e64656420616e6420686173206e6f20617661696c61626c652066756e64696e6720696e666f466163746f72792063616e6e6f7420626520746865207a65726f20616464726573732e4661696c656420746f2073656e6420776974686472617761626c6520616d6f756e7420746f2073656e6465724465706f73697420636f6e7472616374207761732063616c6c6564207769746820756e6b6e6f776e2066756e6374696f6e2073656c6563746f722e4f6e6c792054445420686f6c6465722063616e20726571756573742066756e6465722061626f72744f6e6c792054445420686f6c6465722063616e2072656465656d20756e6c657373206465706f7369742069732061742d7465726d206f7220696e20434f5552544553595f43414c4c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f6e6c79207468652076656e64696e67206d616368696e652063616e2063616c6c207472616e73666572416e6452657175657374526564656d7074696f6e466163746f72792063616e206f6e6c7920626520696e697469616c697a6564206f6e63652e4465706f73697420686173206e6f2066756e64732063757272656e746c792061742061756374696f6ea265627a7a723158204fd8e8f47fab657a4eba862f2fb7db2af739524483118ccf24d0a1c72938e4bd64736f6c63430005110032466163746f72792063616e6e6f7420626520746865207a65726f20616464726573732e466163746f72792063616e206f6e6c7920626520696e697469616c697a6564206f6e63652e",
  "deployedBytecode": "0x60806040526004361061050b5760003560e01c806385df153d11610297578063c415955911610165578063dba49153116100cc578063f5f6deda11610085578063f5f6deda14611d4e578063f603f2eb14611d87578063f97a02fa14611db3578063fb7c592a14611ddc578063fb90da6814611ea9578063fc1e6db214611ebe5761050b565b8063dba4915314611c21578063dd9e995a14611479578063df27eb8914611cd0578063ea3db25014611cfa578063f0cde07e14611d0f578063f21cc71f14611d245761050b565b8063d02fd9581161011e578063d02fd958146115fc578063d459c4161461162f578063d5eef9711461189a578063d826f88f14611966578063d8d023301461197b578063d9f74b0e146119ae5761050b565b8063c41595591461153c578063c4572eb914611575578063c4d66de81461158a578063c6254dba146115bd578063c82ba9dd146115d2578063cfaba010146115e75761050b565b8063994aa93111610209578063b4bd2e7a116101c2578063b4bd2e7a146114a9578063b6104f96146114be578063b6aef06f146114d3578063b7a34a73146114e8578063ba34683914611512578063bcb65607146115275761050b565b8063994aa931146112e5578063a2af0419146113a7578063a6c1691c146113da578063a81e63f7146113ef578063abb3bb7314611446578063b1474a97146114795761050b565b806393c43bd01161025b57806393c43bd014611212578063946626f414611240578063946fbf4c1461126a578063951303f51461127f57806396aab311146112945780639894d734146112a95761050b565b806385df153d1461117757806387a90d801461118c5780638a7e6464146111a157806390a2f687146111cb57806391d165e3146111fd5761050b565b80632d099442116103df5780636e4668be1161034657806375030f9c116102ff57806375030f9c1461076657806376ef551014610f9d5780637a26f05a14610fb25780637be4227f14610fe05780637f6e12161461109b57806384eb69aa146110b05761050b565b80636e4668be14610e145780636ede101114610e29578063725bd32414610e535780637305919914610f04578063735bd9d614610f1957806374f1c69414610f4c5761050b565b80634f706e44116103985780634f706e4414610c5257806356de96db14610c6757806360e98d5914610c9457806368b2bb3514610ca95780636beb29ef14610d755780636c3b011414610dff5761050b565b80632d099442146109b35780633322f9a014610a7f57806335bc0ebe14610bb557806342dbc60a14610bca578063436fd9e614610bfa5780634cb24d4114610c245761050b565b806313f654df11610483578063245dc4c51161043c578063245dc4c51461093557806324600fc31461094a578063259b1ea31461095f578063287b32e5146109745780632b0bc981146109895780632c735daa1461099e5761050b565b806313f654df146108455780631865c57d1461085a57806318e3cde9146108855780631f8e1d6a1461089a578063228a0507146108af57806324315537146108e05761050b565b8063058d3703116104d5578063058d37031461076657806307acd5cb1461078d5780630b3728c3146107a25780630c3f6acf146107d05780630d5889f4146107e55780631209114a146108115761050b565b80621b28031461054a57806249ce7514610581578063022d44b71461063257806303c73ded146106655780630576025214610693575b36156105485760405162461bcd60e51b815260040180806020018281038252603b8152602001806154c7603b913960400191505060405180910390fd5b005b34801561055657600080fd5b5061055f611eee565b604080516bffffffffffffffffffffffff199092168252519081900360200190f35b34801561058d57600080fd5b50610548600480360360208110156105a457600080fd5b810190602081018135600160201b8111156105be57600080fd5b8201836020820111156105d057600080fd5b803590602001918460018302840111600160201b831117156105f157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f74945050505050565b34801561063e57600080fd5b506105486004803603602081101561065557600080fd5b50356001600160a01b031661210f565b34801561067157600080fd5b506105486004803603602081101561068857600080fd5b503561ffff16612131565b34801561069f57600080fd5b50610749600480360360408110156106b657600080fd5b810190602081018135600160201b8111156106d057600080fd5b8201836020820111156106e257600080fd5b803590602001918460018302840111600160201b8311171561070357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff1691506121519050565b604080516001600160c01b03199092168252519081900360200190f35b34801561077257600080fd5b5061077b61224d565b60408051918252519081900360200190f35b34801561079957600080fd5b5061077b6122a1565b3480156107ae57600080fd5b50610548600480360360208110156107c557600080fd5b503561ffff166122b2565b3480156107dc57600080fd5b5061077b6122ca565b3480156107f157600080fd5b506107fa6122da565b6040805161ffff9092168252519081900360200190f35b34801561081d57600080fd5b506105486004803603602081101561083457600080fd5b503567ffffffffffffffff166122eb565b34801561085157600080fd5b5061077b612319565b34801561086657600080fd5b5061086f6122ca565b6040805160ff9092168252519081900360200190f35b34801561089157600080fd5b5061077b612426565b3480156108a657600080fd5b5061054861247a565b3480156108bb57600080fd5b506108c4612486565b604080516001600160a01b039092168252519081900360200190f35b3480156108ec57600080fd5b50610548600480360360a081101561090357600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608090910135166124da565b34801561094157600080fd5b5061077b612539565b34801561095657600080fd5b5061054861253f565b34801561096b57600080fd5b50610548612549565b34801561098057600080fd5b506105486125b5565b34801561099557600080fd5b50610548612607565b3480156109aa57600080fd5b50610548612659565b3480156109bf57600080fd5b50610548600480360360a08110156109d657600080fd5b60ff8235169160208101359160408201359160608101359181019060a081016080820135600160201b811115610a0b57600080fd5b820183602082011115610a1d57600080fd5b803590602001918460018302840111600160201b83111715610a3e57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506126ab945050505050565b348015610a8b57600080fd5b5061077b60048036036040811015610aa257600080fd5b810190602081018135600160201b811115610abc57600080fd5b820183602082011115610ace57600080fd5b803590602001918460018302840111600160201b83111715610aef57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610b4157600080fd5b820183602082011115610b5357600080fd5b803590602001918460018302840111600160201b83111715610b7457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506127ac945050505050565b348015610bc157600080fd5b5061077b6128d1565b348015610bd657600080fd5b5061054860048036036040811015610bed57600080fd5b5080359060200135612925565b348015610c0657600080fd5b5061054860048036036020811015610c1d57600080fd5b5035612930565b348015610c3057600080fd5b50610c39612944565b6040805192835260208301919091528051918290030190f35b348015610c5e57600080fd5b5061054861294e565b348015610c7357600080fd5b5061054860048036036020811015610c8a57600080fd5b503560ff166129a0565b348015610ca057600080fd5b5061077b6129c0565b348015610cb557600080fd5b50610548600480360360a0811015610ccc57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610cf657600080fd5b820183602082011115610d0857600080fd5b803590602001918460018302840111600160201b83111715610d2957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602081013590604001356129d1565b348015610d8157600080fd5b50610d8a612a10565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610dc4578181015183820152602001610dac565b50505050905090810190601f168015610df15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e0b57600080fd5b506108c4612b54565b348015610e2057600080fd5b5061077b612b63565b348015610e3557600080fd5b5061054860048036036020811015610e4c57600080fd5b5035612bb7565b348015610e5f57600080fd5b5061054860048036036020811015610e7657600080fd5b810190602081018135600160201b811115610e9057600080fd5b820183602082011115610ea257600080fd5b803590602001918460018302840111600160201b83111715610ec357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612bbc945050505050565b348015610f1057600080fd5b5061077b612c28565b348015610f2557600080fd5b5061054860048036036020811015610f3c57600080fd5b50356001600160a01b0316612c2e565b348015610f5857600080fd5b50610f7f60048036036020811015610f6f57600080fd5b50356001600160a01b0316612c50565b60408051938452602084019290925282820152519081900360600190f35b348015610fa957600080fd5b506107fa612c73565b348015610fbe57600080fd5b5061054860048036036020811015610fd557600080fd5b503561ffff16612c7d565b348015610fec57600080fd5b50610ff5612c9f565b60405180866001600160a01b03166001600160a01b0316815260200180602001858152602001848152602001838152602001828103825286818151815260200191508051906020019080838360005b8381101561105c578181015183820152602001611044565b50505050905090810190601f1680156110895780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3480156110a757600080fd5b5061077b612d69565b3480156110bc57600080fd5b50610548600480360360608110156110d357600080fd5b6001600160c01b031982351691602081013591810190606081016040820135600160201b81111561110357600080fd5b82018360208201111561111557600080fd5b803590602001918460018302840111600160201b8311171561113657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612dbd945050505050565b34801561118357600080fd5b506107fa612dec565b34801561119857600080fd5b5061077b612dfc565b3480156111ad57600080fd5b50610548600480360360208110156111c457600080fd5b5035612f0a565b3480156111d757600080fd5b506111e0612f1b565b6040805167ffffffffffffffff9092168252519081900360200190f35b34801561120957600080fd5b50610548612f32565b34801561121e57600080fd5b506105486004803603602081101561123557600080fd5b503561ffff16612f84565b34801561124c57600080fd5b506105486004803603602081101561126357600080fd5b5035612fa7565b34801561127657600080fd5b5061077b612fac565b34801561128b57600080fd5b5061077b613000565b3480156112a057600080fd5b5061054861300c565b3480156112b557600080fd5b50610548600480360360408110156112cc57600080fd5b506001600160c01b03198135811691602001351661305e565b3480156112f157600080fd5b506105486004803603604081101561130857600080fd5b6001600160c01b03198235169190810190604081016020820135600160201b81111561133357600080fd5b82018360208201111561134557600080fd5b803590602001918460018302840111600160201b8311171561136657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506130e4945050505050565b3480156113b357600080fd5b50610548600480360360208110156113ca57600080fd5b50356001600160a01b03166131b6565b3480156113e657600080fd5b5061077b6131d8565b610548600480360360c081101561140557600080fd5b5080356001600160a01b03908116916020810135821691604082013581169160608101358216916080820135169060a0013567ffffffffffffffff1661322c565b34801561145257600080fd5b506105486004803603602081101561146957600080fd5b50356001600160a01b0316613304565b34801561148557600080fd5b506105486004803603604081101561149c57600080fd5b5080359060200135613326565b3480156114b557600080fd5b50610548613331565b3480156114ca57600080fd5b5061077b613383565b3480156114df57600080fd5b5061077b613389565b3480156114f457600080fd5b5061077b6004803603602081101561150b57600080fd5b503561338f565b34801561151e57600080fd5b5061054861341f565b34801561153357600080fd5b50610548613471565b34801561154857600080fd5b506105486004803603606081101561155f57600080fd5b5060ff813516906020810135906040013561347b565b34801561158157600080fd5b5061077b613501565b34801561159657600080fd5b50610548600480360360208110156115ad57600080fd5b50356001600160a01b031661350d565b3480156115c957600080fd5b50610c396135c3565b3480156115de57600080fd5b5061077b6135cd565b3480156115f357600080fd5b506105486135d3565b34801561160857600080fd5b5061077b6004803603602081101561161f57600080fd5b50356001600160a01b0316613625565b34801561163b57600080fd5b50610548600480360360e081101561165257600080fd5b6001600160e01b03198235169190810190604081016020820135600160201b81111561167d57600080fd5b82018360208201111561168f57600080fd5b803590602001918460018302840111600160201b831117156116b057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561170257600080fd5b82018360208201111561171457600080fd5b803590602001918460018302840111600160201b8311171561173557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b0319853516959094909350604081019250602001359050600160201b81111561179957600080fd5b8201836020820111156117ab57600080fd5b803590602001918460018302840111600160201b831117156117cc57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561182657600080fd5b82018360208201111561183857600080fd5b803590602001918460018302840111600160201b8311171561185957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613644945050505050565b3480156118a657600080fd5b50610548600480360360a08110156118bd57600080fd5b60ff8235169160208101359160408201359160608101359181019060a081016080820135600160201b8111156118f257600080fd5b82018360208201111561190457600080fd5b803590602001918460018302840111600160201b8311171561192557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613886945050505050565b34801561197257600080fd5b50610548613918565b34801561198757600080fd5b5061077b6004803603602081101561199e57600080fd5b50356001600160a01b0316613991565b3480156119ba57600080fd5b5061054860048036036101008110156119d257600080fd5b6001600160e01b03198235169190810190604081016020820135600160201b8111156119fd57600080fd5b820183602082011115611a0f57600080fd5b803590602001918460018302840111600160201b83111715611a3057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115611a8257600080fd5b820183602082011115611a9457600080fd5b803590602001918460018302840111600160201b83111715611ab557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b03198535169560ff60208701351695919450925060608101915060400135600160201b811115611b2057600080fd5b820183602082011115611b3257600080fd5b803590602001918460018302840111600160201b83111715611b5357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b811115611bad57600080fd5b820183602082011115611bbf57600080fd5b803590602001918460018302840111600160201b83111715611be057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506139a6945050505050565b348015611c2d57600080fd5b50611c36613bf6565b60405180846001600160c01b0319166001600160c01b031916815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611c93578181015183820152602001611c7b565b50505050905090810190601f168015611cc05780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015611cdc57600080fd5b5061054860048036036020811015611cf357600080fd5b5035613d5c565b348015611d0657600080fd5b50610548613d61565b348015611d1b57600080fd5b5061077b613db3565b348015611d3057600080fd5b5061054860048036036020811015611d4757600080fd5b5035613e07565b348015611d5a57600080fd5b5061054860048036036040811015611d7157600080fd5b506001600160a01b038135169060200135613e0c565b348015611d9357600080fd5b5061054860048036036020811015611daa57600080fd5b50351515613e22565b348015611dbf57600080fd5b50611dc8613e33565b604080519115158252519081900360200190f35b348015611de857600080fd5b5061054860048036036060811015611dff57600080fd5b6001600160c01b03198235169190810190604081016020820135600160201b811115611e2a57600080fd5b820183602082011115611e3c57600080fd5b803590602001918460018302840111600160201b83111715611e5d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150613e879050565b348015611eb557600080fd5b506108c4613fae565b348015611eca57600080fd5b5061054860048036036040811015611ee157600080fd5b5080359060200135613fbd565b6000600173__DepositUtils__________________________63e0dfd81a90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b505af4158015611f56573d6000803e3d6000fd5b505050506040513d6020811015611f6c57600080fd5b505190505b90565b6040805163ad91ce1f60e01b8152600160048201529051339173__DepositUtils__________________________9163ad91ce1f91602480820192602092909190829003018186803b158015611fc957600080fd5b505af4158015611fdd573d6000803e3d6000fd5b505050506040513d6020811015611ff357600080fd5b50516001600160a01b03161461203a5760405162461bcd60e51b81526004018080602001828103825260288152602001806155026028913960400191505060405180910390fd5b60408051635f3c5d8960e01b81526001600482018181526024830193845284516044840152845173__DepositFunding________________________94635f3c5d8994879392606490910190602085019080838360005b838110156120a9578181015183820152602001612091565b50505050905090810190601f1680156120d65780820380516001836020036101000a031916815260200191505b50935050505060006040518083038186803b1580156120f457600080fd5b505af4158015612108573d6000803e3d6000fd5b5050505050565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6006805461ffff909216620100000263ffff000019909216919091179055565b60405162793f2d60e51b815260016004820181815260ff8416604484015260606024840190815285516064850152855160009473__DepositUtils__________________________94630f27e5a0949093899389936084019060208601908083838d5b838110156121cc5781810151838201526020016121b4565b50505050905090810190601f1680156121f95780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b15801561221857600080fd5b505af415801561222c573d6000803e3d6000fd5b505050506040513d602081101561224257600080fd5b505190505b92915050565b6000600173__DepositUtils__________________________63a880784890916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b60006122ad6001613fcf565b905090565b6006805461ffff191661ffff92909216919091179055565b600554600160e01b900460ff1690565b600654600160201b900461ffff1690565b6005805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b6000600173__DepositStates_________________________63fb0611ff90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561236d57600080fd5b505af4158015612381573d6000803e3d6000fd5b505050506040513d602081101561239757600080fd5b50516123d45760405162461bcd60e51b81526004018080602001828103825260298152602001806155f66029913960400191505060405180910390fd5b604080516350ef3aa160e01b815260016004820152905173__DepositUtils__________________________916350ef3aa1916024808301926020929190829003018186803b158015611f4257600080fd5b6000600173__DepositUtils__________________________632fac808a90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b61248460016140a3565b565b6000600173__DepositUtils__________________________631bf7ad3190916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b600180546001600160a01b03199081166001600160a01b03978816179091556002805482169587169590951790945560038054851693861693909317909255600480548416918516919091179055600580549092169216919091179055565b600d5490565b61248460016141e1565b6040805163426e16c160e01b815260016004820152905173__DepositFunding________________________9163426e16c1916024808301926000929190829003018186803b15801561259b57600080fd5b505af41580156125af573d6000803e3d6000fd5b50505050565b6040805163077aceb960e31b815260016004820152905173__DepositLiquidation____________________91633bd675c8916024808301926000929190829003018186803b15801561259b57600080fd5b6040805163439b7be160e11b815260016004820152905173__DepositRedemption_____________________91638736f7c2916024808301926000929190829003018186803b15801561259b57600080fd5b60408051631754228360e11b815260016004820152905173__DepositLiquidation____________________91632ea84506916024808301926000929190829003018186803b15801561259b57600080fd5b600173__DepositFunding________________________63fb12d9df909187878787876040518763ffffffff1660e01b8152600401808781526020018660ff1660ff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561273e578181015183820152602001612726565b50505050905090810190601f16801561276b5780820380516001836020036101000a031916815260200191505b5097505050505050505060006040518083038186803b15801561278d57600080fd5b505af41580156127a1573d6000803e3d6000fd5b505050505050505050565b6000600173__DepositRedemption_____________________63936b9ac5909185856040518463ffffffff1660e01b8152600401808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561282457818101518382015260200161280c565b50505050905090810190601f1680156128515780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561288457818101518382015260200161286c565b50505050905090810190601f1680156128b15780820380516001836020036101000a031916815260200191505b509550505050505060206040518083038186803b15801561221857600080fd5b6000600173__DepositUtils__________________________6391f88c8590916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b600891909155600955565b61294160018263ffffffff6143fe16565b50565b6008546009549091565b604080516361f036d360e01b815260016004820152905173__DepositFunding________________________916361f036d3916024808301926000929190829003018186803b15801561259b57600080fd5b6005805460ff909216600160e01b0260ff60e01b19909216919091179055565b600554600160e81b900461ffff1690565b601080546001600160a01b0319166001600160a01b03871617905583516129ff90601190602087019061539e565b506012929092556014556015555050565b6060600173__DepositUtils__________________________63db08d91990916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015612a6457600080fd5b505af4158015612a78573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612aa157600080fd5b8101908080516040519392919084600160201b821115612ac057600080fd5b908301906020820185811115612ad557600080fd5b8251600160201b811182820188101715612aee57600080fd5b82525081516020918201929091019080838360005b83811015612b1b578181015183820152602001612b03565b50505050905090810190601f168015612b485780820380516001836020036101000a031916815260200191505b50604052505050905090565b600b546001600160a01b031690565b6000600173__DepositLiquidation____________________63e86e97b690916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b601355565b60408051635c7b82d760e01b81526001600482018181526024830193845284516044840152845173__DepositUtils__________________________94635c7b82d7948793926064909101906020850190808383600083156120a9578181015183820152602001612091565b60145490565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008080612c666001858363ffffffff61447b16565b9250925092509193909250565b60065461ffff1690565b6005805461ffff909216600160e81b0261ffff60e81b19909216919091179055565b6010546012546014546015546011805460408051602060026101006001861615026000190190941693909304601f81018490048402820184019092528181526000976060978997889788976001600160a01b039094169693959294919390928691830182828015612d515780601f10612d2657610100808354040283529160200191612d51565b820191906000526020600020905b815481529060010190602001808311612d3457829003601f168201915b50505050509350945094509450945094509091929394565b6000600173__DepositUtils__________________________6368c2bd8690916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b6016805467ffffffffffffffff191660c085901c179055601782905580516125af90601890602084019061539e565b60065462010000900461ffff1690565b6000600173__DepositStates_________________________6348312fa390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612e5057600080fd5b505af4158015612e64573d6000803e3d6000fd5b505050506040513d6020811015612e7a57600080fd5b505115612eb85760405162461bcd60e51b81526004018080602001828103825260418152602001806154376041913960600191505060405180910390fd5b60408051631ec664f560e21b815260016004820152905173__DepositUtils__________________________91637b1993d4916024808301926020929190829003018186803b158015611f4257600080fd5b61294160018263ffffffff6146f216565b600554600160a01b900467ffffffffffffffff1690565b60408051634e40547560e11b815260016004820152905173__DepositLiquidation____________________91639c80a8ea916024808301926000929190829003018186803b15801561259b57600080fd5b6006805461ffff909216600160201b0265ffff0000000019909216919091179055565b600d55565b6000600173__DepositUtils__________________________637949c2d290916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b60006122ad60016147b7565b6040805163a221542160e01b815260016004820152905173__DepositLiquidation____________________9163a2215421916024808301926000929190829003018186803b15801561259b57600080fd5b60408051632d0c21bf60e01b8152600160048201526001600160c01b0319808516602483015283166044820152905173__DepositRedemption_____________________91632d0c21bf916064808301926000929190829003018186803b1580156130c857600080fd5b505af41580156130dc573d6000803e3d6000fd5b505050505050565b604051632cac94ef60e01b81526001600482018181526001600160c01b03198516602484015260606044840190815284516064850152845173__DepositRedemption_____________________94632cac94ef94938893889391929091608490910190602085019080838360005b8381101561316a578181015183820152602001613152565b50505050905090810190601f1680156131975780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038186803b1580156130c857600080fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000600173__DepositUtils__________________________63fa067d9290916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b600180546001600160a01b03199081166001600160a01b03898116919091178355600280548316898316179055600380548316888316179055600480548316878316178155600580549093169186169190911790915560408051632851e9dd60e01b81529182019290925267ffffffffffffffff83166024820152905173__DepositFunding________________________91632851e9dd916044808301926000929190829003018186803b1580156132e457600080fd5b505af41580156132f8573d6000803e3d6000fd5b50505050505050505050565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600e91909155600f55565b604080516324e8e19960e21b815260016004820152905173__DepositLiquidation____________________916393a38664916024808301926000929190829003018186803b15801561259b57600080fd5b60085490565b60135490565b6000600173__DepositUtils__________________________631129a8a99091846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b1580156133eb57600080fd5b505af41580156133ff573d6000803e3d6000fd5b505050506040513d602081101561341557600080fd5b505190505b919050565b604080516304bfa27760e01b815260016004820152905173__DepositRedemption_____________________916304bfa277916024808301926000929190829003018186803b15801561259b57600080fd5b61248460016147ce565b60408051631e3435d560e11b81526001600482015260ff851660248201526044810184905260648101839052905173__DepositRedemption_____________________91633c686baa916084808301926000929190829003018186803b1580156134e457600080fd5b505af41580156134f8573d6000803e3d6000fd5b50505050505050565b60006122ad6001614b33565b6001600160a01b0381166135525760405162461bcd60e51b81526004018080602001828103825260238152602001806154786023913960400191505060405180910390fd5b60005460ff16156135945760405162461bcd60e51b81526004018080602001828103825260258152602001806155d16025913960400191505060405180910390fd5b6000805460ff196001600160a01b0390931661010002610100600160a81b031990911617919091166001179055565b600e54600f549091565b600c5490565b6040805163288ac18560e21b815260016004820152905173__DepositUtils__________________________9163a22b0614916024808301926000929190829003018186803b15801561259b57600080fd5b60008061363a6001848363ffffffff61447b16565b5090949350505050565b604051636c7e2b9d60e01b81526001600482018181526001600160e01b0319808b1660248501528716608484015260c48301859052610100604484019081528951610104850152895173__DepositRedemption_____________________94636c7e2b9d94938d938d938d938d938d938d938d93606481019160a482019160e48101916101249091019060208d019080838360005b838110156136f15781810151838201526020016136d9565b50505050905090810190601f16801561371e5780820380516001836020036101000a031916815260200191505b5085810384528a5181528a516020918201918c019080838360005b83811015613751578181015183820152602001613739565b50505050905090810190601f16801561377e5780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b838110156137b1578181015183820152602001613799565b50505050905090810190601f1680156137de5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b838110156138115781810151838201526020016137f9565b50505050905090810190601f16801561383e5780820380516001836020036101000a031916815260200191505b509c5050505050505050505050505060006040518083038186803b15801561386557600080fd5b505af4158015613879573d6000803e3d6000fd5b5050505050505050505050565b600173__DepositLiquidation____________________634941676c909187878787876040518763ffffffff1660e01b8152600401808781526020018660ff1660ff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360008381101561273e578181015183820152602001612726565b61392260006129a0565b61392d600080612925565b60408051602081019091526000808252613949918180806129d1565b613968600060c01b600060405180602001604052806000815250612dbd565b613972600061210f565b61397c6000613d5c565b6139866000612fa7565b612484600080613326565b60008061363a6001848163ffffffff61447b16565b60405163d745519360e01b81526001600482018181526001600160e01b0319808c1660248501528816608484015260ff871660a484015260e48301859052610120604484019081528a516101248501528a5173__DepositFunding________________________9463d745519394938e938e938e938e938e938e938e938e939291606482019160c4810191610104820191610144019060208e019080838360005b83811015613a5f578181015183820152602001613a47565b50505050905090810190601f168015613a8c5780820380516001836020036101000a031916815260200191505b5085810384528b5181528b516020918201918d019080838360005b83811015613abf578181015183820152602001613aa7565b50505050905090810190601f168015613aec5780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b83811015613b1f578181015183820152602001613b07565b50505050905090810190601f168015613b4c5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015613b7f578181015183820152602001613b67565b50505050905090810190601f168015613bac5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060006040518083038186803b158015613bd457600080fd5b505af4158015613be8573d6000803e3d6000fd5b505050505050505050505050565b6000806060600173__DepositStates_________________________6348312fa390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613c4d57600080fd5b505af4158015613c61573d6000803e3d6000fd5b505050506040513d6020811015613c7757600080fd5b505115613cb55760405162461bcd60e51b81526004018080602001828103825260418152602001806154376041913960600191505060405180910390fd5b60165460175460188054604080516020601f6002600019600187161561010002019095169490940493840181900481028201810190925282815260c09590951b94918391830182828015613d4a5780601f10613d1f57610100808354040283529160200191613d4a565b820191906000526020600020905b815481529060010190602001808311613d2d57829003601f168201915b50505050509050925092509250909192565b600c55565b60408051632ec8740960e21b815260016004820152905173__DepositFunding________________________9163bb21d024916024808301926000929190829003018186803b15801561259b57600080fd5b6000600173__DepositUtils__________________________638fdd038890916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b600755565b613e1e6001838363ffffffff614b5216565b5050565b61294160018263ffffffff614b9e16565b6000600173__DepositStates_________________________630f2c635590916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f4257600080fd5b6005546001600160a01b03163314613ed05760405162461bcd60e51b815260040180806020018281038252603e815260200180615593603e913960400191505060405180910390fd5b604051630d806ee760e41b81526001600482018181526001600160c01b0319861660248401526001600160a01b038416606484015260806044840190815285516084850152855173__DepositRedemption_____________________9463d806ee70949389938993899360a40190602086019080838360005b83811015613f61578181015183820152602001613f49565b50505050905090810190601f168015613f8e5780820380516001836020036101000a031916815260200191505b509550505050505060006040518083038186803b1580156134e457600080fd5b600a546001600160a01b031690565b6000918252601a602052604090912055565b600a810154604080516307acd5cb60e01b8152905160009247926001600160a01b039091169182916307acd5cb916004808301928892919082900301818387803b15801561401c57600080fd5b505af1158015614030573d6000803e3d6000fd5b50479250505082811161408a576040805162461bcd60e51b815260206004820152601d60248201527f4e6f2066756e64732072656365697665642c20756e6578706563746564000000604482015290519081900360640190fd5b61409a818463ffffffff614f0416565b95945050505050565b60006140ae82614f61565b90506001600160a01b0381166140c45750612941565b6140cd82615045565b6001830154604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561411a57600080fd5b505afa15801561412e573d6000803e3d6000fd5b505050506040513d602081101561414457600080fd5b505110613e1e5760018201546001600160a01b031663a9059cbb8261416885615045565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156141b757600080fd5b505af11580156141cb573d6000803e3d6000fd5b505050506040513d60208110156125af57600080fd5b336000908152601882016020908152604091829020548251635a33257560e01b8152600481018590529251909273__DepositStates_________________________92635a33257592602480840193829003018186803b15801561424457600080fd5b505af4158015614258573d6000803e3d6000fd5b505050506040513d602081101561426e57600080fd5b50516142c1576040805162461bcd60e51b815260206004820152601b60248201527f436f6e7472616374206e6f7420796574207465726d696e617465640000000000604482015290519081900360640190fd5b6000811161430c576040805162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015290519081900360640190fd5b80471015614361576040805162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e6365000000604482015290519081900360640190fd5b3360008181526018840160205260408082208290555190919083908381818185875af1925050503d80600081146143b4576040519150601f19603f3d011682016040523d82523d6000602084013e6143b9565b606091505b50509050806143f95760405162461bcd60e51b815260040180806020018281038252602c81526020018061549b602c913960400191505060405180910390fd5b505050565b600a8201546040805163799cd33360e01b81526004810184905290516001600160a01b039092169163799cd3339160248082019260009290919082900301818387803b15801561444d57600080fd5b505af1158015614461573d6000803e3d6000fd5b505050600091825250601990910160205260409020429055565b60008060008084806144a65750856001600160a01b031661449b88615071565b6001600160a01b0316145b90506000806144b4896150d2565b11801561453b57508773__DepositStates_________________________63761275bf90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561450d57600080fd5b505af4158015614521573d6000803e3d6000fd5b505050506040513d602081101561453757600080fd5b5051155b90508180614547575080155b6145825760405162461bcd60e51b815260040180806020018281038252604881526020018061552a6048913960600191505060405180910390fd5b60008061458e8a614f61565b6001600160a01b0316141590506000886001600160a01b03166145b08b614f61565b6001600160a01b031614905060006145c78b615045565b905060006145d88286868987615184565b90506145fc816145f06145ea8f6151d2565b89615263565b9063ffffffff61527a16565b60018d0154604080516370a0823160e01b81523060048201529051929b506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561464f57600080fd5b505afa158015614663573d6000803e3d6000fd5b505050506040513d602081101561467957600080fd5b50519050808a111561469c576146958a8263ffffffff614f0416565b99506146a1565b600099505b8580156146ab5750845b80156146b5575083155b156146be578297505b6146e0886146d48581858f63ffffffff61527a16565b9063ffffffff614f0416565b98505050505050505093509350939050565b80471015614747576040805162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f7567682066756e647320746f2073656e640000000000000000604482015290519081900360640190fd5b8015613e1e57600a82015460408051631bb457e560e21b815290516001600160a01b03909216918291636ed15f9491859160048082019260009290919082900301818588803b15801561479957600080fd5b505af11580156147ad573d6000803e3d6000fd5b5050505050505050565b336000908152601882016020526040902054919050565b60008173__DepositUtils__________________________63ad91ce1f90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561482157600080fd5b505af4158015614835573d6000803e3d6000fd5b505050506040513d602081101561484b57600080fd5b505160408051631bf7ad3160e01b815260048101859052905191925060009173__DepositUtils__________________________91631bf7ad31916024808301926020929190829003018186803b1580156148a557600080fd5b505af41580156148b9573d6000803e3d6000fd5b505050506040513d60208110156148cf57600080fd5b50516004840154600f8501549192506001600160a01b039081169160009182918291614904918991168363ffffffff61447b16565b91945092509050821561499a576001870154604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561496d57600080fd5b505af1158015614981573d6000803e3d6000fd5b505050506040513d602081101561499757600080fd5b50505b8115614aab57836001600160a01b0316866001600160a01b03161415614a2657600187015460408051630852cd8d60e31b81526004810185905290516001600160a01b03909216916342966c689160248082019260009290919082900301818387803b158015614a0957600080fd5b505af1158015614a1d573d6000803e3d6000fd5b50505050614aab565b60018701546040805163a9059cbb60e01b81526001600160a01b038981166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015614a7e57600080fd5b505af1158015614a92573d6000803e3d6000fd5b505050506040513d6020811015614aa857600080fd5b50505b80156134f85760018701546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015614b0957600080fd5b505af1158015614b1d573d6000803e3d6000fd5b505050506040513d60208110156127a157600080fd5b6005810154600090612247906127109061ffff1663ffffffff6152db16565b6001600160a01b0382166000908152601884016020526040902054614b7d908263ffffffff61527a16565b6001600160a01b039092166000908152601890930160205250604090912055565b60408051630b97468760e31b8152600481018490528215156024820152905173__OutsourceDepositLogging_______________91635cba3438916044808301926000929190829003018186803b158015614bf857600080fd5b505af4158015614c0c573d6000803e3d6000fd5b505050506000614c1b83613fcf565b600f8401546040805163288ac18560e21b81526004810187905290519293506001600160a01b039091169173__DepositUtils__________________________9163a22b0614916024808301926000929190829003018186803b158015614c8157600080fd5b505af4158015614c95573d6000803e3d6000fd5b505050508373__DepositStates_________________________63e0dfa4b390916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015614cea57600080fd5b505af4158015614cfe573d6000803e3d6000fd5b505050506040513d6020811015614d1457600080fd5b50518015614d1f5750825b15614e11578373__DepositStates_________________________63056256a890916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015614d7557600080fd5b505af4158015614d89573d6000803e3d6000fd5b50614da192508691508390508463ffffffff614b5216565b8373__OutsourceDepositLogging_______________6332e42f2d90916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015614df257600080fd5b505af4158015614e06573d6000803e3d6000fd5b505050505050613e1e565b6009840180546001600160a01b031916331790554260078501558215614e9f578373__DepositStates_________________________63c28eab4090916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015614e8257600080fd5b505af4158015614e96573d6000803e3d6000fd5b505050506125af565b8373__DepositStates_________________________635dd33d9990916040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015614ef057600080fd5b505af41580156147ad573d6000803e3d6000fd5b600082821115614f5b576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600381015460408051634f558e7960e01b8152306004820152905160009283926001600160a01b0390911691634f558e7991602480820192602092909190829003018186803b158015614fb357600080fd5b505afa158015614fc7573d6000803e3d6000fd5b505050506040513d6020811015614fdd57600080fd5b505115612247576003830154604080516331a9108f60e11b815230600482015290516001600160a01b0390921691636352211e91602480820192602092909190829003018186803b15801561503157600080fd5b505afa15801561222c573d6000803e3d6000fd5b600481015460009061224790600160e81b900461ffff16615065846151d2565b9063ffffffff6152db16565b6002810154604080516331a9108f60e11b815230600482015290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b1580156150be57600080fd5b505afa1580156133ff573d6000803e3d6000fd5b60008061515973__TBTCConstants_________________________63d565d1f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561511c57600080fd5b505af4158015615130573d6000803e3d6000fd5b505050506040513d602081101561514657600080fd5b505160168501549063ffffffff61527a16565b90508042101561517b57615173814263ffffffff614f0416565b91505061341a565b50600092915050565b6000808580156151915750845b801561519b575082155b9050600086806151a85750855b806151b05750845b9050600081156151bd5788015b82156151c65788015b98975050505050505050565b600061224773__TBTCConstants_________________________63ae9eb1276040518163ffffffff1660e01b815260040160206040518083038186803b15801561521b57600080fd5b505af415801561522f573d6000803e3d6000fd5b505050506040513d602081101561524557600080fd5b50516004840154600160a01b900467ffffffffffffffff1690615345565b6000811561527357506000612247565b5090919050565b6000828201838110156152d4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000808211615331576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161533c57fe5b04949350505050565b60008261535457506000612247565b8282028284828161536157fe5b04146152d45760405162461bcd60e51b81526004018080602001828103825260218152602001806155726021913960400191505060405180910390fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106153df57805160ff191683800117855561540c565b8280016001018555821561540c579182015b8281111561540c5782518255916020019190600101906153f1565b5061541892915061541c565b5090565b611f7191905b80821115615418576000815560010161542256fe4465706f73697420686173206e6f7420796574206265656e2066756e64656420616e6420686173206e6f20617661696c61626c652066756e64696e6720696e666f466163746f72792063616e6e6f7420626520746865207a65726f20616464726573732e4661696c656420746f2073656e6420776974686472617761626c6520616d6f756e7420746f2073656e6465724465706f73697420636f6e7472616374207761732063616c6c6564207769746820756e6b6e6f776e2066756e6374696f6e2073656c6563746f722e4f6e6c792054445420686f6c6465722063616e20726571756573742066756e6465722061626f72744f6e6c792054445420686f6c6465722063616e2072656465656d20756e6c657373206465706f7369742069732061742d7465726d206f7220696e20434f5552544553595f43414c4c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f6e6c79207468652076656e64696e67206d616368696e652063616e2063616c6c207472616e73666572416e6452657175657374526564656d7074696f6e466163746f72792063616e206f6e6c7920626520696e697469616c697a6564206f6e63652e4465706f73697420686173206e6f2066756e64732063757272656e746c792061742061756374696f6ea265627a7a723158204fd8e8f47fab657a4eba862f2fb7db2af739524483118ccf24d0a1c72938e4bd64736f6c63430005110032",
  "sourceMap": "147:2255:31:-;;;342:5:18;313:34;;-1:-1:-1;;313:34:18;;;194:80:31;5:2:-1;;;;30:1;27;20:12;5:2;-1:-1;2505:31:2;2524:10;-1:-1:-1;;;;;2505:10:2;:31;:::i;:::-;147:2255:31;;947:271:18;-1:-1:-1;;;;;1010:22:18;;1002:70;;;;-1:-1:-1;;;1002:70:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1091:12;;;;1090:13;1082:63;;;;-1:-1:-1;;;1082:63:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:15;:26;;-1:-1:-1;;;;;;;1156:26:18;;;;;-1:-1:-1;;;;;;1156:26:18;;;;1192:19;;;;1156:15;1192:19;;;947:271::o;147:2255:31:-;;;;;;;",
  "deployedSourceMap": "147:2255:31:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2662:8:2;:20;2641:126;;;;-1:-1:-1;;;2641:126:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;147:2255:31;1416:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1416:91:31;;;:::i;:::-;;;;-1:-1:-1;;1416:91:31;;;;;;;;;;;;;;13593:316:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13593:316:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13593:316:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;13593:316:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13593:316:2;;;;;;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;13593:316:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13593:316:2;;-1:-1:-1;13593:316:2;;-1:-1:-1;;;;;13593:316:2:i;3866:101:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3866:101:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3866:101:30;-1:-1:-1;;;;;3866:101:30;;:::i;2493:196::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2493:196:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2493:196:30;;;;:::i;966:235:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;966:235:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;966:235:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;966:235:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;966:235:31;;;;;;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;966:235:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;966:235:31;;-1:-1:-1;;;966:235:31;;;;;-1:-1:-1;966:235:31;;-1:-1:-1;966:235:31:i;:::-;;;;-1:-1:-1;;;;;;966:235:31;;;;;;;;;;;;;;3744:101:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3744:101:2;;;:::i;:::-;;;;;;;;;;;;;;;;1954:100:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1954:100:31;;;:::i;2695:168:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2695:168:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2695:168:30;;;;:::i;4120:106:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4120:106:2;;;:::i;7628:186::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7628:186:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2379:108:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2379:108:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2379:108:30;;;;:::i;9801:224:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9801:224:2;;;:::i;1977:77:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1977:77:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1626:103:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1626:103:31;;;:::i;2060:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2060:88:31;;;:::i;1735:121::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1735:121:31;;;:::i;:::-;;;;-1:-1:-1;;;;;1735:121:31;;;;;;;;;;;;;;1027:477:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1027:477:30;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;1027:477:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4552:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4552:118:30;;;:::i;32273:71:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32273:71:2;;;:::i;12671:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12671:87:2;;;:::i;17725:77::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17725:77:2;;;:::i;21463:111::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21463:111:2;;;:::i;23124:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23124:101:2;;;:::i;14518:389::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14518:389:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14518:389:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;14518:389:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14518:389:2;;;;;;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;14518:389:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14518:389:2;;-1:-1:-1;14518:389:2;;-1:-1:-1;;;;;14518:389:2:i;7366:237:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7366:237:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7366:237:30;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;7366:237:30;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7366:237:30;;;;;;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;7366:237:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;7366:237:30;;;;;;;;-1:-1:-1;7366:237:30;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;7366:237:30;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7366:237:30;;;;;;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;7366:237:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;7366:237:30;;-1:-1:-1;7366:237:30;;-1:-1:-1;;;;;7366:237:30:i;5067:101:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5067:101:2;;;:::i;3103:218:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3103:218:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3103:218:30;;;;;;;:::i;7107:98::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7107:98:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7107:98:30;;:::i;3696:164::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3696:164:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11264:91:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11264:91:2;;;:::i;1889:82:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1889:82:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1889:82:30;;;;:::i;2279:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2279:94:30;;;:::i;4987:532::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4987:532:30;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;4987:532:30;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4987:532:30;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4987:532:30;;;;;;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;4987:532:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4987:532:30;;-1:-1:-1;;4987:532:30;;;-1:-1:-1;;;4987:532:30;;;;;;;;;:::i;1308:102:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1308:102:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1308:102:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4672:95:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4672:95:2;;;:::i;5447:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5447:129:2;;;:::i;5525:133:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5525:133:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5525:133:30;;:::i;581:144:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;581:144:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;581:144:31;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;581:144:31;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;581:144:31;;;;;;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;581:144:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;581:144:31;;-1:-1:-1;581:144:31;;-1:-1:-1;;;;;581:144:31:i;7609:115:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7609:115:30;;;:::i;3973:141::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3973:141:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3973:141:30;-1:-1:-1;;;;;3973:141:30;;:::i;6524:184::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6524:184:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6524:184:30;-1:-1:-1;;;;;6524:184:30;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;5870:128:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5870:128:2;;;:::i;2060:120:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2060:120:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2060:120:30;;;;:::i;5927:321::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5927:321:30;;;:::i;:::-;;;;;-1:-1:-1;;;;;5927:321:30;-1:-1:-1;;;;;5927:321:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;5927:321:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;456:119:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;456:119:31;;;:::i;6254:264:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6254:264:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6254:264:30;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6254:264:30;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6254:264:30;;;;;;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;6254:264:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;6254:264:30;;-1:-1:-1;6254:264:30;;-1:-1:-1;;;;;6254:264:30:i;6736:170:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6736:170:2;;;:::i;8259:233::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8259:233:2;;;:::i;2154:109:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2154:109:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2154:109:31;;:::i;2972:102:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2972:102:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18509:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18509:95:2;;;:::i;2869:228:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2869:228:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2869:228:30;;;;:::i;4401:145::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4401:145:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4401:145:30;;:::i;3323:97:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3323:97:2;;;:::i;10386:114::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10386:114:2;;;:::i;17350:81::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17350:81:2;;;:::i;26995:251::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26995:251:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;;26995:251:2;;;;;;;;;;:::i;25321:256::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25321:256:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25321:256:2;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;25321:256:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25321:256:2;;;;;;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;25321:256:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;25321:256:2;;-1:-1:-1;25321:256:2;;-1:-1:-1;;;;;25321:256:2:i;5782:139:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5782:139:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5782:139:30;-1:-1:-1;;;;;5782:139:30;;:::i;1513:107:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1513:107:31;;;:::i;477:544:30:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;477:544:30;;-1:-1:-1;;;;;477:544:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3327:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3327:123:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3327:123:30;-1:-1:-1;;;;;3327:123:30;;:::i;4676:149::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4676:149:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4676:149:30;;;;;;;:::i;19324:117:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19324:117:2;;;:::i;3576:114:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3576:114:30;;;:::i;5664:112::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5664:112:30;;;:::i;7211:149::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7211:149:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7211:149:30;;:::i;22266:103:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22266:103:2;;;:::i;6714::30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6714:103:30;;;:::i;26075:169:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26075:169:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26075:169:2;;;;;;;;;;;;;;:::i;7845:121:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7845:121:30;;;:::i;947:271:18:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;947:271:18;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;947:271:18;-1:-1:-1;;;;;947:271:18;;:::i;4831:150:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4831:150:30;;;:::i;4275:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4275:120:30;;;:::i;1862:86:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1862:86:31;;;:::i;23698:255:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23698:255:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23698:255:2;-1:-1:-1;;;;;23698:255:2;;:::i;28706:582::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28706:582:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;28706:582:2;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28706:582:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28706:582:2;;;;;;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;28706:582:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28706:582:2;;;;;;;;-1:-1:-1;28706:582:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;28706:582:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28706:582:2;;;;;;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;28706:582:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28706:582:2;;-1:-1:-1;;;;;;28706:582:2;;;;;;;;-1:-1:-1;28706:582:2;;;;-1:-1:-1;28706:582:2;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;28706:582:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28706:582:2;;;;;;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;28706:582:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28706:582:2;;;;;;;;;-1:-1:-1;28706:582:2;;;;-1:-1:-1;28706:582:2;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;28706:582:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28706:582:2;;;;;;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;28706:582:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28706:582:2;;-1:-1:-1;28706:582:2;;-1:-1:-1;;;;;28706:582:2:i;20472:305::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20472:305:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;20472:305:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;20472:305:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20472:305:2;;;;;;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;20472:305:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;20472:305:2;;-1:-1:-1;20472:305:2;;-1:-1:-1;;;;;20472:305:2:i;1510:373:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1510:373:30;;;:::i;24219:259:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24219:259:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24219:259:2;-1:-1:-1;;;;;24219:259:2;;:::i;16227:650::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16227:650:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;16227:650:2;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;16227:650:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:650:2;;;;;;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;16227:650:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:650:2;;;;;;;;-1:-1:-1;16227:650:2;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;16227:650:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:650:2;;;;;;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;16227:650:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:650:2;;-1:-1:-1;;;;;;16227:650:2;;;;;;;;;;;;;-1:-1:-1;16227:650:2;-1:-1:-1;16227:650:2;;;;-1:-1:-1;16227:650:2;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;16227:650:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:650:2;;;;;;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;16227:650:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:650:2;;;;;;;;;-1:-1:-1;16227:650:2;;;;-1:-1:-1;16227:650:2;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;16227:650:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16227:650:2;;;;;;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;16227:650:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;16227:650:2;;-1:-1:-1;16227:650:2;;-1:-1:-1;;;;;16227:650:2:i;8977:407::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8977:407:2;;;:::i;:::-;;;;;-1:-1:-1;;;;;8977:407:2;;-1:-1:-1;;;;;8977:407:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;8977:407:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4120:149:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4120:149:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4120:149:30;;:::i;11824:85:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11824:85:2;;;:::i;333:117:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;333:117:31;;;:::i;2186:87:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2186:87:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2186:87:30;;:::i;2269:131:31:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2269:131:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2269:131:31;;;;;;;;:::i;6965:98:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6965:98:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6965:98:30;;;;:::i;4347:88:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4347:88:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;31569:541;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31569:541:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;31569:541:2;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31569:541:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31569:541:2;;;;;;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;31569:541:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;31569:541:2;;-1:-1:-1;;;31569:541:2;;-1:-1:-1;;;;;31569:541:2;;-1:-1:-1;31569:541:2;;-1:-1:-1;31569:541:2:i;3456:114:30:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3456:114:30;;;:::i;6823:136::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6823:136:30;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6823:136:30;;;;;;;:::i;1416:91:31:-;1458:7;1484:4;:14;;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1484:16:31;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1484:16:31;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1484:16:31;;-1:-1:-1;1416:91:31;;:::o;13593:316:2:-;13749:19;;;-1:-1:-1;;;13749:19:2;;:4;:19;;;;;;13772:10;;13749:17;;;;:19;;;;;;;;;;;;;;;:17;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;13749:19:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13749:19:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13749:19:2;-1:-1:-1;;;;;13749:33:2;;13728:120;;;;-1:-1:-1;;;13728:120:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13859:43;;;-1:-1:-1;;;13859:43:2;;:4;:43;;;;;;;;;;;;;;;;;;;;:23;;;;13883:18;;13859:43;;;;;;;;;;;;;-1:-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;13859:43:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13859:43:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13859:43:2;;;;13593:316;:::o;3866:101:30:-;3929:16;:31;;-1:-1:-1;;;;;;3929:31:30;-1:-1:-1;;;;;3929:31:30;;;;;;;;;;3866:101::o;2493:196::-;2603:40;:79;;;;;;;;-1:-1:-1;;2603:79:30;;;;;;;;;2493:196::o;966:235:31:-;1126:68;;-1:-1:-1;;;1126:68:31;;:4;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;1101:6;;1126:30;;;;:4;;1157:15;;1174:19;;1126:68;;;;;;;;;;1101:6;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1126:68:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1126:68:31;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1126:68:31;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1126:68:31;;-1:-1:-1;966:235:31;;;;;:::o;3744:101:2:-;3792:7;3818:4;:18;;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;1954:100:31;1998:7;2024:23;:4;:21;:23::i;:::-;2017:30;;1954:100;:::o;2695:168:30:-;2791:33;:65;;-1:-1:-1;;2791:65:30;;;;;;;;;;;;2695:168::o;4120:106:2:-;4201:17;;-1:-1:-1;;;4201:17:2;;;;;4120:106::o;7628:186::-;7759:48;;-1:-1:-1;;;7759:48:2;;;;;7628:186::o;2379:108:30:-;2441:20;:39;;;;;;-1:-1:-1;;;2441:39:30;-1:-1:-1;;;;2441:39:30;;;;;;;;;2379:108::o;9801:224:2:-;9848:7;9888:4;:24;;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9888:26:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9888:26:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9888:26:2;9867:114;;;;-1:-1:-1;;;9867:114:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9999:19;;;-1:-1:-1;;;9999:19:2;;:4;:19;;;;;;:17;;;;:19;;;;;;;;;;;;;;:17;:19;;;5:2:-1;;;;30:1;27;20:12;1626:103:31;1674:7;1700:4;:20;;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;2060:88:31;2115:26;:4;:24;:26::i;:::-;2060:88::o;1735:121::-;1788:15;1822:4;:25;;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;1027:477:30;1234:4;:35;;-1:-1:-1;;;;;;1234:35:30;;;-1:-1:-1;;;;;1234:35:30;;;;;;;1279:14;:34;;;;;;;;;;;;;;1323:21;:50;;;;;;;;;;;;;;1383:19;:53;;;;;;;;;;;;;1446:26;:51;;;;;;;;;;;;;1027:477::o;4552:118::-;4636:27;;4552:118;:::o;32273:71:2:-;32317:20;:4;:18;:20::i;12671:87::-;12723:28;;;-1:-1:-1;;;12723:28:2;;:4;:28;;;;;;:26;;;;:28;;;;;-1:-1:-1;;12723:28:2;;;;;;;:26;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;12723:28:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12723:28:2;;;;12671:87::o;17725:77::-;17772:23;;;-1:-1:-1;;;17772:23:2;;:4;:23;;;;;;:21;;;;:23;;;;;-1:-1:-1;;17772:23:2;;;;;;;:21;:23;;;5:2:-1;;;;30:1;27;20:12;21463:111:2;21527:40;;;-1:-1:-1;;;21527:40:2;;:4;:40;;;;;;:38;;;;:40;;;;;-1:-1:-1;;21527:40:2;;;;;;;:38;:40;;;5:2:-1;;;;30:1;27;20:12;23124:101:2;23183:35;;;-1:-1:-1;;;23183:35:2;;:4;:35;;;;;;:33;;;;:35;;;;;-1:-1:-1;;23183:35:2;;;;;;;:33;:35;;;5:2:-1;;;;30:1;27;20:12;14518:389:2;14758:4;:34;;;;14806:2;14822;14838;14854:13;14881:9;14758:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;14758:142:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14758:142:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14758:142:2;;;;14518:389;;;;;:::o;7366:237:30:-;7505:7;7531:4;:32;;;;7564:14;7580:15;7531:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;7531:65:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7531:65:30;;;;;;;;;;;;;;;;;;;;;;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;7531:65:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5067:101:2;5115:7;5141:4;:18;;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;3103:218:30;3226:25;:40;;;;3276:26;:38;3103:218::o;7107:98::-;7171:27;:4;7190:7;7171:27;:18;:27;:::i;:::-;7107:98;:::o;3696:164::-;3799:25;;3826:26;;3696:164;;:::o;11264:91:2:-;11318:30;;;-1:-1:-1;;;11318:30:2;;:4;:30;;;;;;:28;;;;:30;;;;;-1:-1:-1;;11318:30:2;;;;;;;:28;:30;;;5:2:-1;;;;30:1;27;20:12;1889:82:30;1938:17;:26;;;;;;-1:-1:-1;;;1938:26:30;-1:-1:-1;;;;1938:26:30;;;;;;;;;1889:82::o;2279:94::-;2349:21;;-1:-1:-1;;;2349:21:30;;;;;2279:94::o;4987:532::-;5237:20;:39;;-1:-1:-1;;;;;;5237:39:30;-1:-1:-1;;;;;5237:39:30;;;;;5286:49;;;;:25;;:49;;;;;:::i;:::-;-1:-1:-1;5345:25:30;:49;;;;5404:26;:51;5465:24;:47;-1:-1:-1;;4987:532:30:o;1308:102:31:-;1353:12;1384:4;:17;;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1384:19:31;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1384:19:31;;;;;;39:16:-1;36:1;17:17;2:54;101:4;1384:19:31;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;1384:19:31;;;;;;;;;;;;;-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;1384:19:31;;420:4:-1;411:14;;;;1384:19:31;;;;;411:14:-1;1384:19:31;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;1384:19:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1377:26;;1308:102;:::o;4672:95:2:-;4744:16;;-1:-1:-1;;;;;4744:16:2;4672:95;:::o;5447:129::-;5509:7;5535:4;:32;;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5525:133:30;5604:24;:47;5525:133::o;581:144:31:-;673:45;;;-1:-1:-1;;;673:45:31;;:4;:45;;;;;;;;;;;;;;;;;;;;:28;;;;:45;;;;;;;;;;;;;;;-1:-1:-1;27:10;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;7609:115:30;7691:26;;7609:115;:::o;3973:141::-;4056:26;:51;;-1:-1:-1;;;;;;4056:51:30;-1:-1:-1;;;;;4056:51:30;;;;;;;;;;3973:141::o;6524:184::-;6604:7;;;6648:53;:4;6684:9;6604:7;6648:53;:35;:53;:::i;:::-;6641:60;;;;;;6524:184;;;;;:::o;5870:128:2:-;5958:33;;;;5870:128;:::o;2060:120:30:-;2132:21;:41;;;;;;-1:-1:-1;;;2132:41:30;-1:-1:-1;;;;2132:41:30;;;;;;;;;2060:120::o;5927:321::-;6055:20;;6128:25;;6167:26;;6207:24;;6089:25;6034:207;;;;;;;6055:20;:4;6034:207;;;;-1:-1:-1;;6034:207:30;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5983:12:30;;-1:-1:-1;;;;;;;;;;;6055:20:30;;;;6089:25;;6128;;6167:26;;6207:24;;6089:25;;6034:207;;6089:25;6034:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5927:321;;;;;:::o;456:119:31:-;512:7;538:4;:28;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;6254:264:30;6396:19;:37;;-1:-1:-1;;6396:37:30;;;;;;;;6443:13;:25;;;6478:33;;;;:17;;:33;;;;;:::i;6736:170:2:-;6859:40;;;;;;;;6736:170::o;8259:233::-;8303:7;8344:4;:14;;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8344:16:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8344:16:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8344:16:2;8343:17;8322:129;;;;-1:-1:-1;;;8322:129:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8469:16;;;-1:-1:-1;;;8469:16:2;;:4;:16;;;;;;:14;;;;:16;;;;;;;;;;;;;;:14;:16;;;5:2:-1;;;;30:1;27;20:12;2154:109:31;2220:36;:4;2246:9;2220:36;:25;:36;:::i;2972:102:2:-;3047:20;;-1:-1:-1;;;3047:20:2;;;;;2972:102::o;18509:95::-;18565:32;;;-1:-1:-1;;;18565:32:2;;:4;:32;;;;;;:30;;;;:32;;;;;-1:-1:-1;;18565:32:2;;;;;;;:30;:32;;;5:2:-1;;;;30:1;27;20:12;2869:228:30;2995:48;:95;;;;;;-1:-1:-1;;;2995:95:30;-1:-1:-1;;2995:95:30;;;;;;;;;2869:228::o;4401:145::-;4486:27;:53;4401:145::o;3323:97:2:-;3369:7;3395:4;:16;;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;10386:114:2;10439:7;10465:28;:4;:26;:28::i;17350:81::-;17399:25;;;-1:-1:-1;;;17399:25:2;;:4;:25;;;;;;:23;;;;:25;;;;;-1:-1:-1;;17399:25:2;;;;;;;:23;:25;;;5:2:-1;;;;30:1;27;20:12;26995:251:2;27130:109;;;-1:-1:-1;;;27130:109:2;;:4;:109;;;;-1:-1:-1;;;;;;27130:109:2;;;;;;;;;;;;;;;:26;;;;:109;;;;;-1:-1:-1;;27130:109:2;;;;;;;:26;:109;;;5:2:-1;;;;30:1;27;20:12;5:2;27130:109:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27130:109:2;;;;26995:251;;:::o;25321:256::-;25506:64;;-1:-1:-1;;;25506:64:2;;:4;:64;;;;;;-1:-1:-1;;;;;;25506:64:2;;;;;;;;;;;;;;;;;;;;;:22;;;;:4;25529:17;;25548:21;;25506:64;;;;;;;;;;;;;;;;-1:-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;25506:64:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5782:139:30;5875:20;:39;;-1:-1:-1;;;;;;5875:39:30;-1:-1:-1;;;;;5875:39:30;;;;;;;;;;5782:139::o;1513:107:31:-;1563:7;1589:4;:22;;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;477:544:30;746:4;:29;;-1:-1:-1;;;;;;746:29:30;;;-1:-1:-1;;;;;746:29:30;;;;;;;;;785:14;:27;;;;;;;;;;822:21;:41;;;;;;;;;;873:19;:37;;;;;;;;;;920:26;:51;;;;;;;;;;;;;;;981:33;;;-1:-1:-1;;;981:33:30;;;;;;;;;;;;;;;;;;:15;;;;:33;;;;;-1:-1:-1;;981:33:30;;;;;;;:15;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;981:33:30;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;981:33:30;;;;477:544;;;;;;:::o;3327:123::-;3405:25;:38;;-1:-1:-1;;;;;;3405:38:30;-1:-1:-1;;;;;3405:38:30;;;;;;;;;;3327:123::o;4676:149::-;4750:24;:29;;;;4789:24;:29;4676:149::o;19324:117:2:-;19391:43;;;-1:-1:-1;;;19391:43:2;;:4;:43;;;;;;:41;;;;:43;;;;;-1:-1:-1;;19391:43:2;;;;;;;:41;:43;;;5:2:-1;;;;30:1;27;20:12;3576:114:30;3658:25;;3576:114;:::o;5664:112::-;5745:24;;5664:112;:::o;7211:149::-;7286:7;7312:4;:32;;;;7345:7;7312:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7312:41:30;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7312:41:30;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7312:41:30;;-1:-1:-1;7211:149:30;;;;:::o;22266:103:2:-;22326:36;;;-1:-1:-1;;;22326:36:2;;:4;:36;;;;;;:34;;;;:36;;;;;-1:-1:-1;;22326:36:2;;;;;;;:34;:36;;;5:2:-1;;;;30:1;27;20:12;6714:103:30;6773:37;:4;:35;:37::i;26075:169:2:-;26194:43;;;-1:-1:-1;;;26194:43:2;;:4;:43;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;;:43;;;;;-1:-1:-1;;26194:43:2;;;;;;;:31;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;26194:43:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26194:43:2;;;;26075:169;;;:::o;7845:121:30:-;7902:7;7928:31;:4;:29;:31::i;947:271:18:-;-1:-1:-1;;;;;1010:22:18;;1002:70;;;;-1:-1:-1;;;1002:70:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1091:12;;;;1090:13;1082:63;;;;-1:-1:-1;;;1082:63:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:15;:26;;-1:-1:-1;;;;;;;1156:26:18;;;;;-1:-1:-1;;;;;;1156:26:18;;;;1192:19;;;;1156:15;1192:19;;;947:271::o;4831:150:30:-;4923:24;;4949;;4831:150;;:::o;4275:120::-;4360:28;;4275:120;:::o;1862:86:31:-;1916:25;;;-1:-1:-1;;;1916:25:31;;:4;:25;;;;;;:23;;;;:25;;;;;-1:-1:-1;;1916:25:31;;;;;;;:23;:25;;;5:2:-1;;;;30:1;27;20:12;23698:255:2;23802:7;;23865:53;:4;23901:9;23802:7;23865:53;:35;:53;:::i;:::-;-1:-1:-1;23825:93:2;;23698:255;-1:-1:-1;;;;23698:255:2:o;28706:582::-;29054:227;;-1:-1:-1;;;29054:227:2;;:4;:227;;;;;;-1:-1:-1;;;;;;29054:227:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;;:4;29095:10;;29119:14;;29147:15;;29176:11;;29201:12;;29227:15;;29256;;29054:227;;;;;;;;;;;;;;;;;;;;;;;;-1:-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;29054:227:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29054:227:2;;;;;;;;;;;;;;;;;;;;;;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;29054:227:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29054:227:2;;;;;;;;;;;;;;;;;;;;;;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;29054:227:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29054:227:2;;;;;;;;;;;;;;;;;;;;;;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;29054:227:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29054:227:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29054:227:2;;;;28706:582;;;;;;;:::o;20472:305::-;20705:4;:27;;;;20733:2;20737;20741;20745:13;20760:9;20705:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1510:373:30;1544:11;1553:1;1544:8;:11::i;:::-;1565:39;1599:1;1602;1565:33;:39::i;:::-;1614:48;;;;;;;;;1637:1;1614:48;;;;;1637:1;;;1614:14;:48::i;:::-;1672:32;1694:1;1687:9;;1698:1;1672:32;;;;;;;;;;;;:14;:32::i;:::-;1715:26;1738:1;1715:14;:26::i;:::-;1751:29;1778:1;1751:26;:29::i;:::-;1790:28;1816:1;1790:25;:28::i;:::-;1828:48;1861:1;;1828:24;:48::i;24219:259:2:-;24328:7;;24391:52;24438:4;24427:9;24438:4;24391:52;:35;:52;:::i;16227:650::-;16610:260;;-1:-1:-1;;;16610:260:2;;:4;:260;;;;;;-1:-1:-1;;;;;;16610:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;;:4;16651:10;;16675:14;;16703:15;;16732:11;;16757:19;;16790:12;;16816:15;;16845;;16610:260;;;;;;;;;;;;;;;;;;;;;;;;-1:-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;16610:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16610:260:2;;;;;;;;;;;;;;;;;;;;;;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;16610:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16610:260:2;;;;;;;;;;;;;;;;;;;;;;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;16610:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16610:260:2;;;;;;;;;;;;;;;;;;;;;;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;16610:260:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16610:260:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16610:260:2;;;;16227:650;;;;;;;;:::o;8977:407::-;9060:21;9095:16;9125:25;9197:4;:14;;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9197:16:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9197:16:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9197:16:2;9196:17;9175:129;;;;-1:-1:-1;;;9175:129:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9323:19;;9344:13;;9359:17;9315:62;;;;;;;;-1:-1:-1;;9323:4:2;9315:62;;;9323:19;9315:62;;;;;;;;;;;;;;;;;;;;;;;;;;;9323:19;;;;;;9315:62;9359:17;;9315:62;;9359:17;9315:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8977:407;;;:::o;4120:149:30:-;4207:28;:55;4120:149::o;11824:85:2:-;11875:27;;;-1:-1:-1;;;11875:27:2;;:4;:27;;;;;;:25;;;;:27;;;;;-1:-1:-1;;11875:27:2;;;;;;;:25;:27;;;5:2:-1;;;;30:1;27;20:12;333:117:31;388:7;414:4;:27;;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;2186:87:30;2242:17;:24;2186:87::o;2269:131:31:-;2350:43;:4;2372:11;2385:7;2350:43;:21;:43;:::i;:::-;2269:131;;:::o;6965:98:30:-;7024:32;:4;7046:9;7024:32;:21;:32;:::i;4347:88:2:-;4390:4;4413;:13;;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;31569:541:2;31841:26;;-1:-1:-1;;;;;31841:26:2;31827:10;:40;31806:149;;;;-1:-1:-1;;;31806:149:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31965:138;;-1:-1:-1;;;31965:138:2;;:4;:138;;;;;;-1:-1:-1;;;;;;31965:138:2;;;;;;-1:-1:-1;;;;;31965:138:2;;;;;;;;;;;;;;;;;;;;;:33;;;;:4;32012:17;;32043:21;;32078:15;;31965:138;;;;;;;;;;-1:-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;31965:138:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;3456:114:30;3538:25;;-1:-1:-1;;;;;3538:25:30;3456:114;:::o;6823:136::-;6910:29;;;;:20;:29;;;;;;:42;6823:136::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;22504:482::-;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;21389:660:7;21507:10;21464:17;21484:34;;;:22;;;:34;;;;;;;;;;21537:15;;-1:-1:-1;;;21537:15:7;;;;;;;;;;21484:34;;21537:13;;;;:15;;;;;;;;;;:13;:15;;;5:2:-1;;;;30:1;27;20:12;5:2;21537:15:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21537:15:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21537:15:7;21529:55;;;;;-1:-1:-1;;;21529:55:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;21614:1;21602:9;:13;21594:45;;;;;-1:-1:-1;;;21594:45:7;;;;;;;;;;;;-1:-1:-1;;;21594:45:7;;;;;;;;;;;;;;;21695:9;21670:21;:34;;21649:110;;;;;-1:-1:-1;;;21649:110:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;21835:10;21849:1;21812:34;;;:22;;;:34;;;;;;:38;;;21937:36;21849:1;;21835:10;21959:9;;21849:1;21937:36;21849:1;21937:36;21959:9;21835:10;21937:36;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;21923:50:7;;;21991:2;21983:59;;;;-1:-1:-1;;;21983:59:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21389:660;;;:::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;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;23209:351::-;23342:9;23317:21;:34;;23309:71;;;;;-1:-1:-1;;;23309:71:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;23394:13;;23390:164;;23465:14;;;;23494:49;;;-1:-1:-1;;;23494:49:7;;;;-1:-1:-1;;;;;23465:14:7;;;;;;23494:30;;23531:9;;23494:49;;;;;23423:22;;23494:49;;;;;;;;23531:9;23465:14;23494:49;;;5:2:-1;;;;30:1;27;20:12;5:2;23494:49:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23494:49:7;;;;;23390:164;23209:351;;:::o;22172:182::-;22336:10;22283:7;22313:34;;;:22;;;:34;;;;;;22172:182;;;:::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;19965:189:7;20115:31;;;;20066:7;;20096:51;;20104:5;;20115:31;;20096:51;:18;:51;:::i;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;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;5:2;4125:29:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;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;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;13961:137:7;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;19001:243::-;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;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;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;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;834:176:60:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:60:o;2606:326::-;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;1693:458::-;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;147:2255:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;147:2255:31;;;-1:-1:-1;147:2255:31;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity 0.5.17;\n\nimport {DepositUtils} from \"../../../contracts/deposit/DepositUtils.sol\";\nimport {TestDeposit} from \"./TestDeposit.sol\";\n\ncontract TestDepositUtils is TestDeposit {\n    constructor() public {\n    // solium-disable-previous-line no-empty-blocks\n    }\n\n    // Passthroughs to test view and pure functions\n\n    function currentBlockDifficulty() public view returns (uint256) {\n        return self.currentBlockDifficulty();\n    }\n\n    function previousBlockDifficulty() public view returns (uint256) {\n        return self.previousBlockDifficulty();\n    }\n\n    function evaluateProofDifficulty(bytes memory _bitcoinHeaders) public view {\n        return self.evaluateProofDifficulty(_bitcoinHeaders);\n    }\n\n    function setPubKey(\n        bytes32 _signingGroupPubkeyX,\n        bytes32 _signingGroupPubkeyY\n    ) public {\n        self.signingGroupPubkeyX = _signingGroupPubkeyX;\n        self.signingGroupPubkeyY = _signingGroupPubkeyY;\n    }\n\n    function findAndParseFundingOutput(\n        bytes memory _txOutputVector,\n        uint8 _fundingOutputIndex\n    ) public view returns (bytes8) {\n        return self.findAndParseFundingOutput(_txOutputVector, _fundingOutputIndex);\n    }\n\n    function signerFee() public view returns (uint256) {\n        return self.signerFeeTbtc();\n    }\n\n    function signerPubkey() public view returns (bytes memory) {\n        return self.signerPubkey();\n    }\n\n    function signerPKH() public view returns (bytes20) {\n        return self.signerPKH();\n    }\n\n    function fetchBitcoinPrice() public view returns (uint256) {\n        return self.fetchBitcoinPrice();\n    }\n\n    function fetchBondAmount() public view returns (uint256) {\n        return self.fetchBondAmount();\n    }\n\n    function feeRebateTokenHolder() public view returns (address payable) {\n        return self.feeRebateTokenHolder();\n    }\n\n    function redemptionTeardown() public {\n        return self.redemptionTeardown();\n    }\n\n    function seizeSignerBonds() public returns (uint256) {\n        return self.seizeSignerBonds();\n    }\n\n    function distributeFeeRebate() public {\n        return self.distributeFeeRebate();\n    }\n\n    function pushFundsToKeepGroup(uint256 _ethValue) public {\n        self.pushFundsToKeepGroup(_ethValue);\n    }\n\n    function enableWithdrawal(address _withdrawer, uint256 _amount) public {\n        self.enableWithdrawal(_withdrawer, _amount);\n    }\n}\n\n// Separate contract for testing SPV proofs, as putting this in the main\n// TestDepositUtils contract causes it to run out of gas before finishing its\n// deploy.\ncontract TestDepositUtilsSPV is TestDeposit {\n    constructor() public {\n        // solium-disable-previous-line no-empty-blocks\n    }\n\n    function setPubKey(\n        bytes32 _signingGroupPubkeyX,\n        bytes32 _signingGroupPubkeyY\n    ) public {\n        self.signingGroupPubkeyX = _signingGroupPubkeyX;\n        self.signingGroupPubkeyY = _signingGroupPubkeyY;\n    }\n\n    function validateAndParseFundingSPVProof(\n        bytes4 _txVersion,\n        bytes memory _txInputVector,\n        bytes memory _txOutputVector,\n        bytes4 _txLocktime,\n        uint8 _fundingOutputIndex,\n        bytes memory _merkleProof,\n        uint256 _txIndexInBlock,\n        bytes memory _bitcoinHeaders\n    ) public view returns (bytes8 _valueBytes, bytes memory _utxoOutpoint){\n        return self.validateAndParseFundingSPVProof(\n            _txVersion,\n            _txInputVector,\n            _txOutputVector,\n            _txLocktime,\n            _fundingOutputIndex,\n            _merkleProof,\n            _txIndexInBlock,\n            _bitcoinHeaders\n        );\n    }\n\n    function checkProofFromTxId(\n        bytes32 _bitcoinTxId,\n        bytes memory _merkleProof,\n        uint256 _index,\n        bytes memory _bitcoinHeaders\n    ) public view returns (bytes32) {\n        self.checkProofFromTxId(_bitcoinTxId, _merkleProof, _index, _bitcoinHeaders);\n    }\n}\n",
  "sourcePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/test/deposit/TestDepositUtils.sol",
  "ast": {
    "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/test/deposit/TestDepositUtils.sol",
    "exportedSymbols": {
      "TestDepositUtils": [
        10045
      ],
      "TestDepositUtilsSPV": [
        10131
      ]
    },
    "id": 10132,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 9854,
        "literals": [
          "solidity",
          "0.5",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:31"
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol",
        "file": "../../../contracts/deposit/DepositUtils.sol",
        "id": 9856,
        "nodeType": "ImportDirective",
        "scope": 10132,
        "sourceUnit": 5104,
        "src": "25:73:31",
        "symbolAliases": [
          {
            "foreign": 9855,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/test/deposit/TestDeposit.sol",
        "file": "./TestDeposit.sol",
        "id": 9858,
        "nodeType": "ImportDirective",
        "scope": 10132,
        "sourceUnit": 9853,
        "src": "99:46:31",
        "symbolAliases": [
          {
            "foreign": 9857,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9859,
              "name": "TestDeposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9852,
              "src": "176:11:31",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TestDeposit_$9852",
                "typeString": "contract TestDeposit"
              }
            },
            "id": 9860,
            "nodeType": "InheritanceSpecifier",
            "src": "176:11:31"
          }
        ],
        "contractDependencies": [
          1134,
          6251,
          9852
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 10045,
        "linearizedBaseContracts": [
          10045,
          9852,
          1134,
          6251
        ],
        "name": "TestDepositUtils",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 9863,
              "nodeType": "Block",
              "src": "215:59:31",
              "statements": []
            },
            "documentation": null,
            "id": 9864,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9861,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "205:2:31"
            },
            "returnParameters": {
              "id": 9862,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "215:0:31"
            },
            "scope": 10045,
            "src": "194:80:31",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9873,
              "nodeType": "Block",
              "src": "397:53:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9869,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "414:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9870,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "currentBlockDifficulty",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3924,
                      "src": "414:27:31",
                      "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": 9871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "414:29:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9868,
                  "id": 9872,
                  "nodeType": "Return",
                  "src": "407:36:31"
                }
              ]
            },
            "documentation": null,
            "id": 9874,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentBlockDifficulty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9865,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "364:2:31"
            },
            "returnParameters": {
              "id": 9868,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9867,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9874,
                  "src": "388:7:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9866,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "388:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "387:9:31"
            },
            "scope": 10045,
            "src": "333:117:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9883,
              "nodeType": "Block",
              "src": "521:54:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9879,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "538:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9880,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "previousBlockDifficulty",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3937,
                      "src": "538:28:31",
                      "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": 9881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "538:30:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9878,
                  "id": 9882,
                  "nodeType": "Return",
                  "src": "531:37:31"
                }
              ]
            },
            "documentation": null,
            "id": 9884,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "previousBlockDifficulty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9875,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "488:2:31"
            },
            "returnParameters": {
              "id": 9878,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9877,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9884,
                  "src": "512:7:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9876,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "512:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "511:9:31"
            },
            "scope": 10045,
            "src": "456:119:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9894,
              "nodeType": "Block",
              "src": "656:69:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9891,
                        "name": "_bitcoinHeaders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9886,
                        "src": "702:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9889,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "673:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9890,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "evaluateProofDifficulty",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4036,
                      "src": "673:28:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes_memory_ptr_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes memory) view"
                      }
                    },
                    "id": 9892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "673:45:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "functionReturnParameters": 9888,
                  "id": 9893,
                  "nodeType": "Return",
                  "src": "666:52:31"
                }
              ]
            },
            "documentation": null,
            "id": 9895,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "evaluateProofDifficulty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9887,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9886,
                  "name": "_bitcoinHeaders",
                  "nodeType": "VariableDeclaration",
                  "scope": 9895,
                  "src": "614:28:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 9885,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "614:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "613:30:31"
            },
            "returnParameters": {
              "id": 9888,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "656:0:31"
            },
            "scope": 10045,
            "src": "581:144:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9914,
              "nodeType": "Block",
              "src": "839:121:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9902,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "849:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9904,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "signingGroupPubkeyX",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3864,
                      "src": "849:24:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9905,
                      "name": "_signingGroupPubkeyX",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9897,
                      "src": "876:20:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "849:47:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 9907,
                  "nodeType": "ExpressionStatement",
                  "src": "849:47:31"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9912,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9908,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "906:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9910,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "signingGroupPubkeyY",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3866,
                      "src": "906:24:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9911,
                      "name": "_signingGroupPubkeyY",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9899,
                      "src": "933:20:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "906:47:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 9913,
                  "nodeType": "ExpressionStatement",
                  "src": "906:47:31"
                }
              ]
            },
            "documentation": null,
            "id": 9915,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setPubKey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9900,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9897,
                  "name": "_signingGroupPubkeyX",
                  "nodeType": "VariableDeclaration",
                  "scope": 9915,
                  "src": "759:28:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9896,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "759:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9899,
                  "name": "_signingGroupPubkeyY",
                  "nodeType": "VariableDeclaration",
                  "scope": 9915,
                  "src": "797:28:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9898,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "797:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "749:82:31"
            },
            "returnParameters": {
              "id": 9901,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "839:0:31"
            },
            "scope": 10045,
            "src": "731:229:31",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9930,
              "nodeType": "Block",
              "src": "1109:92:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9926,
                        "name": "_txOutputVector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9917,
                        "src": "1157:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9927,
                        "name": "_fundingOutputIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9919,
                        "src": "1174:19:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9924,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "1126:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9925,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "findAndParseFundingOutput",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4150,
                      "src": "1126:30:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes_memory_ptr_$_t_uint8_$returns$_t_bytes8_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes memory,uint8) view returns (bytes8)"
                      }
                    },
                    "id": 9928,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1126:68:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "functionReturnParameters": 9923,
                  "id": 9929,
                  "nodeType": "Return",
                  "src": "1119:75:31"
                }
              ]
            },
            "documentation": null,
            "id": 9931,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "findAndParseFundingOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9920,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9917,
                  "name": "_txOutputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 9931,
                  "src": "1010:28:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 9916,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1010:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9919,
                  "name": "_fundingOutputIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 9931,
                  "src": "1048:25:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 9918,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1048:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1000:79:31"
            },
            "returnParameters": {
              "id": 9923,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9922,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9931,
                  "src": "1101:6:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 9921,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1101:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1100:8:31"
            },
            "scope": 10045,
            "src": "966:235:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9940,
              "nodeType": "Block",
              "src": "1258:44:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9936,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "1275:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9937,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "signerFeeTbtc",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4372,
                      "src": "1275:18:31",
                      "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": 9938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1275:20:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9935,
                  "id": 9939,
                  "nodeType": "Return",
                  "src": "1268:27:31"
                }
              ]
            },
            "documentation": null,
            "id": 9941,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "signerFee",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9932,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1225:2:31"
            },
            "returnParameters": {
              "id": 9935,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9934,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9941,
                  "src": "1249:7:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9933,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1249:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1248:9:31"
            },
            "scope": 10045,
            "src": "1207:95:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9950,
              "nodeType": "Block",
              "src": "1367:43:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9946,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "1384:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9947,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "signerPubkey",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4428,
                      "src": "1384:17:31",
                      "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": 9948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1384:19:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 9945,
                  "id": 9949,
                  "nodeType": "Return",
                  "src": "1377:26:31"
                }
              ]
            },
            "documentation": null,
            "id": 9951,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "signerPubkey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9942,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1329:2:31"
            },
            "returnParameters": {
              "id": 9945,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9944,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9951,
                  "src": "1353:12:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 9943,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1353:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1352:14:31"
            },
            "scope": 10045,
            "src": "1308:102:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9960,
              "nodeType": "Block",
              "src": "1467:40:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9956,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "1484:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9957,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "signerPKH",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4458,
                      "src": "1484:14:31",
                      "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": 9958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1484:16:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "functionReturnParameters": 9955,
                  "id": 9959,
                  "nodeType": "Return",
                  "src": "1477:23:31"
                }
              ]
            },
            "documentation": null,
            "id": 9961,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "signerPKH",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1434:2:31"
            },
            "returnParameters": {
              "id": 9955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9954,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9961,
                  "src": "1458:7:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 9953,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "1458:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1457:9:31"
            },
            "scope": 10045,
            "src": "1416:91:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9970,
              "nodeType": "Block",
              "src": "1572:48:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9966,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "1589:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9967,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "fetchBitcoinPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4484,
                      "src": "1589:22:31",
                      "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": 9968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1589:24:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9965,
                  "id": 9969,
                  "nodeType": "Return",
                  "src": "1582:31:31"
                }
              ]
            },
            "documentation": null,
            "id": 9971,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fetchBitcoinPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9962,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1539:2:31"
            },
            "returnParameters": {
              "id": 9965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9964,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9971,
                  "src": "1563:7:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9963,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1563:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1562:9:31"
            },
            "scope": 10045,
            "src": "1513:107:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9980,
              "nodeType": "Block",
              "src": "1683:46:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9976,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "1700:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9977,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "fetchBondAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4503,
                      "src": "1700:20:31",
                      "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": 9978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1700:22:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9975,
                  "id": 9979,
                  "nodeType": "Return",
                  "src": "1693:29:31"
                }
              ]
            },
            "documentation": null,
            "id": 9981,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fetchBondAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9972,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1650:2:31"
            },
            "returnParameters": {
              "id": 9975,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9974,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9981,
                  "src": "1674:7:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9973,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1674:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1673:9:31"
            },
            "scope": 10045,
            "src": "1626:103:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9990,
              "nodeType": "Block",
              "src": "1805:51:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9986,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "1822:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9987,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "feeRebateTokenHolder",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4582,
                      "src": "1822:25:31",
                      "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": 9988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1822:27:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 9985,
                  "id": 9989,
                  "nodeType": "Return",
                  "src": "1815:34:31"
                }
              ]
            },
            "documentation": null,
            "id": 9991,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "feeRebateTokenHolder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9982,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1764:2:31"
            },
            "returnParameters": {
              "id": 9985,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9984,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 9991,
                  "src": "1788:15:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 9983,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1788:15:31",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1787:17:31"
            },
            "scope": 10045,
            "src": "1735:121:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9998,
              "nodeType": "Block",
              "src": "1899:49:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9994,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "1916:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 9995,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redemptionTeardown",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4636,
                      "src": "1916:23:31",
                      "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": 9996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1916:25:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "functionReturnParameters": 9993,
                  "id": 9997,
                  "nodeType": "Return",
                  "src": "1909:32:31"
                }
              ]
            },
            "documentation": null,
            "id": 9999,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redemptionTeardown",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9992,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1889:2:31"
            },
            "returnParameters": {
              "id": 9993,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1899:0:31"
            },
            "scope": 10045,
            "src": "1862:86:31",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10008,
              "nodeType": "Block",
              "src": "2007:47:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 10004,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "2024:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 10005,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "seizeSignerBonds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4698,
                      "src": "2024:21:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) returns (uint256)"
                      }
                    },
                    "id": 10006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2024:23:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10003,
                  "id": 10007,
                  "nodeType": "Return",
                  "src": "2017:30:31"
                }
              ]
            },
            "documentation": null,
            "id": 10009,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "seizeSignerBonds",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10000,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1979:2:31"
            },
            "returnParameters": {
              "id": 10003,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10002,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10009,
                  "src": "1998:7:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10001,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1998:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1997:9:31"
            },
            "scope": 10045,
            "src": "1954:100:31",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10016,
              "nodeType": "Block",
              "src": "2098:50:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 10012,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "2115:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 10013,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "distributeFeeRebate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4843,
                      "src": "2115:24:31",
                      "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": 10014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2115:26:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "functionReturnParameters": 10011,
                  "id": 10015,
                  "nodeType": "Return",
                  "src": "2108:33:31"
                }
              ]
            },
            "documentation": null,
            "id": 10017,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "distributeFeeRebate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10010,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2088:2:31"
            },
            "returnParameters": {
              "id": 10011,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2098:0:31"
            },
            "scope": 10045,
            "src": "2060:88:31",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10028,
              "nodeType": "Block",
              "src": "2210:53:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10025,
                        "name": "_ethValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10019,
                        "src": "2246:9:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 10022,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "2220:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 10024,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pushFundsToKeepGroup",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4882,
                      "src": "2220:25:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,uint256)"
                      }
                    },
                    "id": 10026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2220:36:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10027,
                  "nodeType": "ExpressionStatement",
                  "src": "2220:36:31"
                }
              ]
            },
            "documentation": null,
            "id": 10029,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pushFundsToKeepGroup",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10020,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10019,
                  "name": "_ethValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 10029,
                  "src": "2184:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10018,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2184:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2183:19:31"
            },
            "returnParameters": {
              "id": 10021,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2210:0:31"
            },
            "scope": 10045,
            "src": "2154:109:31",
            "stateMutability": "nonpayable",
            "superFunction": 9841,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10043,
              "nodeType": "Block",
              "src": "2340:60:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10039,
                        "name": "_withdrawer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10031,
                        "src": "2372:11:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10040,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10033,
                        "src": "2385:7:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 10036,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "2350:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 10038,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "enableWithdrawal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4722,
                      "src": "2350:21:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Deposit_$3893_storage_ptr_$_t_address_$_t_uint256_$returns$__$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,address,uint256)"
                      }
                    },
                    "id": 10041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2350:43:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10042,
                  "nodeType": "ExpressionStatement",
                  "src": "2350:43:31"
                }
              ]
            },
            "documentation": null,
            "id": 10044,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "enableWithdrawal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10034,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10031,
                  "name": "_withdrawer",
                  "nodeType": "VariableDeclaration",
                  "scope": 10044,
                  "src": "2295:19:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10030,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2295:7:31",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10033,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 10044,
                  "src": "2316:15:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10032,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2316:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2294:38:31"
            },
            "returnParameters": {
              "id": 10035,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2340:0:31"
            },
            "scope": 10045,
            "src": "2269:131:31",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 10132,
        "src": "147:2255:31"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 10046,
              "name": "TestDeposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9852,
              "src": "2598:11:31",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TestDeposit_$9852",
                "typeString": "contract TestDeposit"
              }
            },
            "id": 10047,
            "nodeType": "InheritanceSpecifier",
            "src": "2598:11:31"
          }
        ],
        "contractDependencies": [
          1134,
          6251,
          9852
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 10131,
        "linearizedBaseContracts": [
          10131,
          9852,
          1134,
          6251
        ],
        "name": "TestDepositUtilsSPV",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 10050,
              "nodeType": "Block",
              "src": "2637:63:31",
              "statements": []
            },
            "documentation": null,
            "id": 10051,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10048,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2627:2:31"
            },
            "returnParameters": {
              "id": 10049,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2637:0:31"
            },
            "scope": 10131,
            "src": "2616:84:31",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10070,
              "nodeType": "Block",
              "src": "2814:121:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 10058,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "2824:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 10060,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "signingGroupPubkeyX",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3864,
                      "src": "2824:24:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 10061,
                      "name": "_signingGroupPubkeyX",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10053,
                      "src": "2851:20:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2824:47:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 10063,
                  "nodeType": "ExpressionStatement",
                  "src": "2824:47:31"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 10064,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "2881:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 10066,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "signingGroupPubkeyY",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3866,
                      "src": "2881:24:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 10067,
                      "name": "_signingGroupPubkeyY",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10055,
                      "src": "2908:20:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2881:47:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 10069,
                  "nodeType": "ExpressionStatement",
                  "src": "2881:47:31"
                }
              ]
            },
            "documentation": null,
            "id": 10071,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setPubKey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10056,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10053,
                  "name": "_signingGroupPubkeyX",
                  "nodeType": "VariableDeclaration",
                  "scope": 10071,
                  "src": "2734:28:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10052,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2734:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10055,
                  "name": "_signingGroupPubkeyY",
                  "nodeType": "VariableDeclaration",
                  "scope": 10071,
                  "src": "2772:28:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10054,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2772:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2724:82:31"
            },
            "returnParameters": {
              "id": 10057,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2814:0:31"
            },
            "scope": 10131,
            "src": "2706:229:31",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10106,
              "nodeType": "Block",
              "src": "3327:293:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10096,
                        "name": "_txVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10073,
                        "src": "3394:10:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10097,
                        "name": "_txInputVector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10075,
                        "src": "3418:14:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10098,
                        "name": "_txOutputVector",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10077,
                        "src": "3446:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10099,
                        "name": "_txLocktime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10079,
                        "src": "3475:11:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10100,
                        "name": "_fundingOutputIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10081,
                        "src": "3500:19:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10101,
                        "name": "_merkleProof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10083,
                        "src": "3533:12:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10102,
                        "name": "_txIndexInBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10085,
                        "src": "3559:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10103,
                        "name": "_bitcoinHeaders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10087,
                        "src": "3588:15:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "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"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "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": 10094,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "3344:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 10095,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "validateAndParseFundingSPVProof",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4237,
                      "src": "3344:36:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes4_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes4_$_t_uint8_$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes8_$_t_bytes_memory_ptr_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes4,bytes memory,bytes memory,bytes4,uint8,bytes memory,uint256,bytes memory) view returns (bytes8,bytes memory)"
                      }
                    },
                    "id": 10104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3344:269:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes8_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bytes8,bytes memory)"
                    }
                  },
                  "functionReturnParameters": 10093,
                  "id": 10105,
                  "nodeType": "Return",
                  "src": "3337:276:31"
                }
              ]
            },
            "documentation": null,
            "id": 10107,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "validateAndParseFundingSPVProof",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10073,
                  "name": "_txVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 10107,
                  "src": "2991:17:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 10072,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2991:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10075,
                  "name": "_txInputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 10107,
                  "src": "3018:27:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 10074,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3018:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10077,
                  "name": "_txOutputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 10107,
                  "src": "3055:28:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 10076,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3055:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10079,
                  "name": "_txLocktime",
                  "nodeType": "VariableDeclaration",
                  "scope": 10107,
                  "src": "3093:18:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 10078,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "3093:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10081,
                  "name": "_fundingOutputIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 10107,
                  "src": "3121:25:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 10080,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3121:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10083,
                  "name": "_merkleProof",
                  "nodeType": "VariableDeclaration",
                  "scope": 10107,
                  "src": "3156:25:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 10082,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3156:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10085,
                  "name": "_txIndexInBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 10107,
                  "src": "3191:23:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10084,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3191:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10087,
                  "name": "_bitcoinHeaders",
                  "nodeType": "VariableDeclaration",
                  "scope": 10107,
                  "src": "3224:28:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 10086,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3224:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2981:277:31"
            },
            "returnParameters": {
              "id": 10093,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10090,
                  "name": "_valueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 10107,
                  "src": "3280:18:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 10089,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3280:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10092,
                  "name": "_utxoOutpoint",
                  "nodeType": "VariableDeclaration",
                  "scope": 10107,
                  "src": "3300:26:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 10091,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3300:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3279:48:31"
            },
            "scope": 10131,
            "src": "2941:679:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10129,
              "nodeType": "Block",
              "src": "3817:93:31",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10123,
                        "name": "_bitcoinTxId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10109,
                        "src": "3851:12:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10124,
                        "name": "_merkleProof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10111,
                        "src": "3865:12:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10125,
                        "name": "_index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10113,
                        "src": "3879:6:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10126,
                        "name": "_bitcoinHeaders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10115,
                        "src": "3887:15:31",
                        "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": 10120,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 536,
                        "src": "3827:4:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage",
                          "typeString": "struct DepositUtils.Deposit storage ref"
                        }
                      },
                      "id": 10122,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkProofFromTxId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4069,
                      "src": "3827:23:31",
                      "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": 10127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3827:76:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10128,
                  "nodeType": "ExpressionStatement",
                  "src": "3827:76:31"
                }
              ]
            },
            "documentation": null,
            "id": 10130,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkProofFromTxId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10109,
                  "name": "_bitcoinTxId",
                  "nodeType": "VariableDeclaration",
                  "scope": 10130,
                  "src": "3663:20:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10108,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3663:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10111,
                  "name": "_merkleProof",
                  "nodeType": "VariableDeclaration",
                  "scope": 10130,
                  "src": "3693:25:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 10110,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3693:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10113,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 10130,
                  "src": "3728:14:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10112,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3728:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10115,
                  "name": "_bitcoinHeaders",
                  "nodeType": "VariableDeclaration",
                  "scope": 10130,
                  "src": "3752:28:31",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 10114,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3752:5:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3653:133:31"
            },
            "returnParameters": {
              "id": 10119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10118,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 10130,
                  "src": "3808:7:31",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 10117,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3808:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3807:9:31"
            },
            "scope": 10131,
            "src": "3626:284:31",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 10132,
        "src": "2566:1346:31"
      }
    ],
    "src": "0:3913:31"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/test/deposit/TestDepositUtils.sol",
      "exportedSymbols": {
        "TestDepositUtils": [
          10045
        ],
        "TestDepositUtilsSPV": [
          10131
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.5",
            ".17"
          ]
        },
        "id": 9854,
        "name": "PragmaDirective",
        "src": "0:23:31"
      },
      {
        "attributes": {
          "SourceUnit": 5104,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol",
          "file": "../../../contracts/deposit/DepositUtils.sol",
          "scope": 10132,
          "symbolAliases": [
            {
              "foreign": 9855,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 9856,
        "name": "ImportDirective",
        "src": "25:73:31"
      },
      {
        "attributes": {
          "SourceUnit": 9853,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/test/deposit/TestDeposit.sol",
          "file": "./TestDeposit.sol",
          "scope": 10132,
          "symbolAliases": [
            {
              "foreign": 9857,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 9858,
        "name": "ImportDirective",
        "src": "99:46:31"
      },
      {
        "attributes": {
          "contractDependencies": [
            1134,
            6251,
            9852
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            10045,
            9852,
            1134,
            6251
          ],
          "name": "TestDepositUtils",
          "scope": 10132
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "TestDeposit",
                  "referencedDeclaration": 9852,
                  "type": "contract TestDeposit"
                },
                "id": 9859,
                "name": "UserDefinedTypeName",
                "src": "176:11:31"
              }
            ],
            "id": 9860,
            "name": "InheritanceSpecifier",
            "src": "176:11:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 10045,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9861,
                "name": "ParameterList",
                "src": "205:2:31"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9862,
                "name": "ParameterList",
                "src": "215:0:31"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 9863,
                "name": "Block",
                "src": "215:59:31"
              }
            ],
            "id": 9864,
            "name": "FunctionDefinition",
            "src": "194:80:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "currentBlockDifficulty",
              "scope": 10045,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9865,
                "name": "ParameterList",
                "src": "364:2:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 9874,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 9866,
                        "name": "ElementaryTypeName",
                        "src": "388:7:31"
                      }
                    ],
                    "id": 9867,
                    "name": "VariableDeclaration",
                    "src": "388:7:31"
                  }
                ],
                "id": 9868,
                "name": "ParameterList",
                "src": "387:9:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 9868
                    },
                    "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": "currentBlockDifficulty",
                              "referencedDeclaration": 3924,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9869,
                                "name": "Identifier",
                                "src": "414:4:31"
                              }
                            ],
                            "id": 9870,
                            "name": "MemberAccess",
                            "src": "414:27:31"
                          }
                        ],
                        "id": 9871,
                        "name": "FunctionCall",
                        "src": "414:29:31"
                      }
                    ],
                    "id": 9872,
                    "name": "Return",
                    "src": "407:36:31"
                  }
                ],
                "id": 9873,
                "name": "Block",
                "src": "397:53:31"
              }
            ],
            "id": 9874,
            "name": "FunctionDefinition",
            "src": "333:117:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "previousBlockDifficulty",
              "scope": 10045,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9875,
                "name": "ParameterList",
                "src": "488:2:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 9884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 9876,
                        "name": "ElementaryTypeName",
                        "src": "512:7:31"
                      }
                    ],
                    "id": 9877,
                    "name": "VariableDeclaration",
                    "src": "512:7:31"
                  }
                ],
                "id": 9878,
                "name": "ParameterList",
                "src": "511:9:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 9878
                    },
                    "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": "previousBlockDifficulty",
                              "referencedDeclaration": 3937,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9879,
                                "name": "Identifier",
                                "src": "538:4:31"
                              }
                            ],
                            "id": 9880,
                            "name": "MemberAccess",
                            "src": "538:28:31"
                          }
                        ],
                        "id": 9881,
                        "name": "FunctionCall",
                        "src": "538:30:31"
                      }
                    ],
                    "id": 9882,
                    "name": "Return",
                    "src": "531:37:31"
                  }
                ],
                "id": 9883,
                "name": "Block",
                "src": "521:54:31"
              }
            ],
            "id": 9884,
            "name": "FunctionDefinition",
            "src": "456:119:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "evaluateProofDifficulty",
              "scope": 10045,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bitcoinHeaders",
                      "scope": 9895,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 9885,
                        "name": "ElementaryTypeName",
                        "src": "614:5:31"
                      }
                    ],
                    "id": 9886,
                    "name": "VariableDeclaration",
                    "src": "614:28:31"
                  }
                ],
                "id": 9887,
                "name": "ParameterList",
                "src": "613:30:31"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9888,
                "name": "ParameterList",
                "src": "656:0:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 9888
                    },
                    "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_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "evaluateProofDifficulty",
                              "referencedDeclaration": 4036,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes memory) view"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9889,
                                "name": "Identifier",
                                "src": "673:4:31"
                              }
                            ],
                            "id": 9890,
                            "name": "MemberAccess",
                            "src": "673:28:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9886,
                              "type": "bytes memory",
                              "value": "_bitcoinHeaders"
                            },
                            "id": 9891,
                            "name": "Identifier",
                            "src": "702:15:31"
                          }
                        ],
                        "id": 9892,
                        "name": "FunctionCall",
                        "src": "673:45:31"
                      }
                    ],
                    "id": 9893,
                    "name": "Return",
                    "src": "666:52:31"
                  }
                ],
                "id": 9894,
                "name": "Block",
                "src": "656:69:31"
              }
            ],
            "id": 9895,
            "name": "FunctionDefinition",
            "src": "581:144:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setPubKey",
              "scope": 10045,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_signingGroupPubkeyX",
                      "scope": 9915,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 9896,
                        "name": "ElementaryTypeName",
                        "src": "759:7:31"
                      }
                    ],
                    "id": 9897,
                    "name": "VariableDeclaration",
                    "src": "759:28:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_signingGroupPubkeyY",
                      "scope": 9915,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 9898,
                        "name": "ElementaryTypeName",
                        "src": "797:7:31"
                      }
                    ],
                    "id": 9899,
                    "name": "VariableDeclaration",
                    "src": "797:28:31"
                  }
                ],
                "id": 9900,
                "name": "ParameterList",
                "src": "749:82:31"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9901,
                "name": "ParameterList",
                "src": "839:0:31"
              },
              {
                "children": [
                  {
                    "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": "signingGroupPubkeyX",
                              "referencedDeclaration": 3864,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9902,
                                "name": "Identifier",
                                "src": "849:4:31"
                              }
                            ],
                            "id": 9904,
                            "name": "MemberAccess",
                            "src": "849:24:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9897,
                              "type": "bytes32",
                              "value": "_signingGroupPubkeyX"
                            },
                            "id": 9905,
                            "name": "Identifier",
                            "src": "876:20:31"
                          }
                        ],
                        "id": 9906,
                        "name": "Assignment",
                        "src": "849:47:31"
                      }
                    ],
                    "id": 9907,
                    "name": "ExpressionStatement",
                    "src": "849:47:31"
                  },
                  {
                    "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": "signingGroupPubkeyY",
                              "referencedDeclaration": 3866,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9908,
                                "name": "Identifier",
                                "src": "906:4:31"
                              }
                            ],
                            "id": 9910,
                            "name": "MemberAccess",
                            "src": "906:24:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9899,
                              "type": "bytes32",
                              "value": "_signingGroupPubkeyY"
                            },
                            "id": 9911,
                            "name": "Identifier",
                            "src": "933:20:31"
                          }
                        ],
                        "id": 9912,
                        "name": "Assignment",
                        "src": "906:47:31"
                      }
                    ],
                    "id": 9913,
                    "name": "ExpressionStatement",
                    "src": "906:47:31"
                  }
                ],
                "id": 9914,
                "name": "Block",
                "src": "839:121:31"
              }
            ],
            "id": 9915,
            "name": "FunctionDefinition",
            "src": "731:229:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "findAndParseFundingOutput",
              "scope": 10045,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txOutputVector",
                      "scope": 9931,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 9916,
                        "name": "ElementaryTypeName",
                        "src": "1010:5:31"
                      }
                    ],
                    "id": 9917,
                    "name": "VariableDeclaration",
                    "src": "1010:28:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_fundingOutputIndex",
                      "scope": 9931,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 9918,
                        "name": "ElementaryTypeName",
                        "src": "1048:5:31"
                      }
                    ],
                    "id": 9919,
                    "name": "VariableDeclaration",
                    "src": "1048:25:31"
                  }
                ],
                "id": 9920,
                "name": "ParameterList",
                "src": "1000:79:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 9931,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 9921,
                        "name": "ElementaryTypeName",
                        "src": "1101:6:31"
                      }
                    ],
                    "id": 9922,
                    "name": "VariableDeclaration",
                    "src": "1101:6:31"
                  }
                ],
                "id": 9923,
                "name": "ParameterList",
                "src": "1100:8:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 9923
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes8",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "findAndParseFundingOutput",
                              "referencedDeclaration": 4150,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes memory,uint8) view returns (bytes8)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9924,
                                "name": "Identifier",
                                "src": "1126:4:31"
                              }
                            ],
                            "id": 9925,
                            "name": "MemberAccess",
                            "src": "1126:30:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9917,
                              "type": "bytes memory",
                              "value": "_txOutputVector"
                            },
                            "id": 9926,
                            "name": "Identifier",
                            "src": "1157:15:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9919,
                              "type": "uint8",
                              "value": "_fundingOutputIndex"
                            },
                            "id": 9927,
                            "name": "Identifier",
                            "src": "1174:19:31"
                          }
                        ],
                        "id": 9928,
                        "name": "FunctionCall",
                        "src": "1126:68:31"
                      }
                    ],
                    "id": 9929,
                    "name": "Return",
                    "src": "1119:75:31"
                  }
                ],
                "id": 9930,
                "name": "Block",
                "src": "1109:92:31"
              }
            ],
            "id": 9931,
            "name": "FunctionDefinition",
            "src": "966:235:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "signerFee",
              "scope": 10045,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9932,
                "name": "ParameterList",
                "src": "1225:2:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 9941,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 9933,
                        "name": "ElementaryTypeName",
                        "src": "1249:7:31"
                      }
                    ],
                    "id": 9934,
                    "name": "VariableDeclaration",
                    "src": "1249:7:31"
                  }
                ],
                "id": 9935,
                "name": "ParameterList",
                "src": "1248:9:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 9935
                    },
                    "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": "signerFeeTbtc",
                              "referencedDeclaration": 4372,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9936,
                                "name": "Identifier",
                                "src": "1275:4:31"
                              }
                            ],
                            "id": 9937,
                            "name": "MemberAccess",
                            "src": "1275:18:31"
                          }
                        ],
                        "id": 9938,
                        "name": "FunctionCall",
                        "src": "1275:20:31"
                      }
                    ],
                    "id": 9939,
                    "name": "Return",
                    "src": "1268:27:31"
                  }
                ],
                "id": 9940,
                "name": "Block",
                "src": "1258:44:31"
              }
            ],
            "id": 9941,
            "name": "FunctionDefinition",
            "src": "1207:95:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "signerPubkey",
              "scope": 10045,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9942,
                "name": "ParameterList",
                "src": "1329:2:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 9951,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 9943,
                        "name": "ElementaryTypeName",
                        "src": "1353:5:31"
                      }
                    ],
                    "id": 9944,
                    "name": "VariableDeclaration",
                    "src": "1353:12:31"
                  }
                ],
                "id": 9945,
                "name": "ParameterList",
                "src": "1352:14:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 9945
                    },
                    "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": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9946,
                                "name": "Identifier",
                                "src": "1384:4:31"
                              }
                            ],
                            "id": 9947,
                            "name": "MemberAccess",
                            "src": "1384:17:31"
                          }
                        ],
                        "id": 9948,
                        "name": "FunctionCall",
                        "src": "1384:19:31"
                      }
                    ],
                    "id": 9949,
                    "name": "Return",
                    "src": "1377:26:31"
                  }
                ],
                "id": 9950,
                "name": "Block",
                "src": "1367:43:31"
              }
            ],
            "id": 9951,
            "name": "FunctionDefinition",
            "src": "1308:102:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "signerPKH",
              "scope": 10045,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9952,
                "name": "ParameterList",
                "src": "1434:2:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 9961,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes20",
                          "type": "bytes20"
                        },
                        "id": 9953,
                        "name": "ElementaryTypeName",
                        "src": "1458:7:31"
                      }
                    ],
                    "id": 9954,
                    "name": "VariableDeclaration",
                    "src": "1458:7:31"
                  }
                ],
                "id": 9955,
                "name": "ParameterList",
                "src": "1457:9:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 9955
                    },
                    "children": [
                      {
                        "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": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9956,
                                "name": "Identifier",
                                "src": "1484:4:31"
                              }
                            ],
                            "id": 9957,
                            "name": "MemberAccess",
                            "src": "1484:14:31"
                          }
                        ],
                        "id": 9958,
                        "name": "FunctionCall",
                        "src": "1484:16:31"
                      }
                    ],
                    "id": 9959,
                    "name": "Return",
                    "src": "1477:23:31"
                  }
                ],
                "id": 9960,
                "name": "Block",
                "src": "1467:40:31"
              }
            ],
            "id": 9961,
            "name": "FunctionDefinition",
            "src": "1416:91:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "fetchBitcoinPrice",
              "scope": 10045,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9962,
                "name": "ParameterList",
                "src": "1539:2:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 9971,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 9963,
                        "name": "ElementaryTypeName",
                        "src": "1563:7:31"
                      }
                    ],
                    "id": 9964,
                    "name": "VariableDeclaration",
                    "src": "1563:7:31"
                  }
                ],
                "id": 9965,
                "name": "ParameterList",
                "src": "1562:9:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 9965
                    },
                    "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": "fetchBitcoinPrice",
                              "referencedDeclaration": 4484,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9966,
                                "name": "Identifier",
                                "src": "1589:4:31"
                              }
                            ],
                            "id": 9967,
                            "name": "MemberAccess",
                            "src": "1589:22:31"
                          }
                        ],
                        "id": 9968,
                        "name": "FunctionCall",
                        "src": "1589:24:31"
                      }
                    ],
                    "id": 9969,
                    "name": "Return",
                    "src": "1582:31:31"
                  }
                ],
                "id": 9970,
                "name": "Block",
                "src": "1572:48:31"
              }
            ],
            "id": 9971,
            "name": "FunctionDefinition",
            "src": "1513:107:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "fetchBondAmount",
              "scope": 10045,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9972,
                "name": "ParameterList",
                "src": "1650:2:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 9981,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 9973,
                        "name": "ElementaryTypeName",
                        "src": "1674:7:31"
                      }
                    ],
                    "id": 9974,
                    "name": "VariableDeclaration",
                    "src": "1674:7:31"
                  }
                ],
                "id": 9975,
                "name": "ParameterList",
                "src": "1673:9:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 9975
                    },
                    "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": "fetchBondAmount",
                              "referencedDeclaration": 4503,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9976,
                                "name": "Identifier",
                                "src": "1700:4:31"
                              }
                            ],
                            "id": 9977,
                            "name": "MemberAccess",
                            "src": "1700:20:31"
                          }
                        ],
                        "id": 9978,
                        "name": "FunctionCall",
                        "src": "1700:22:31"
                      }
                    ],
                    "id": 9979,
                    "name": "Return",
                    "src": "1693:29:31"
                  }
                ],
                "id": 9980,
                "name": "Block",
                "src": "1683:46:31"
              }
            ],
            "id": 9981,
            "name": "FunctionDefinition",
            "src": "1626:103:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "feeRebateTokenHolder",
              "scope": 10045,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9982,
                "name": "ParameterList",
                "src": "1764:2:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 9991,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address payable",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "payable",
                          "type": "address payable"
                        },
                        "id": 9983,
                        "name": "ElementaryTypeName",
                        "src": "1788:15:31"
                      }
                    ],
                    "id": 9984,
                    "name": "VariableDeclaration",
                    "src": "1788:15:31"
                  }
                ],
                "id": 9985,
                "name": "ParameterList",
                "src": "1787:17:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 9985
                    },
                    "children": [
                      {
                        "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": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9986,
                                "name": "Identifier",
                                "src": "1822:4:31"
                              }
                            ],
                            "id": 9987,
                            "name": "MemberAccess",
                            "src": "1822:25:31"
                          }
                        ],
                        "id": 9988,
                        "name": "FunctionCall",
                        "src": "1822:27:31"
                      }
                    ],
                    "id": 9989,
                    "name": "Return",
                    "src": "1815:34:31"
                  }
                ],
                "id": 9990,
                "name": "Block",
                "src": "1805:51:31"
              }
            ],
            "id": 9991,
            "name": "FunctionDefinition",
            "src": "1735:121:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "redemptionTeardown",
              "scope": 10045,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9992,
                "name": "ParameterList",
                "src": "1889:2:31"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9993,
                "name": "ParameterList",
                "src": "1899:0:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 9993
                    },
                    "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": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 9994,
                                "name": "Identifier",
                                "src": "1916:4:31"
                              }
                            ],
                            "id": 9995,
                            "name": "MemberAccess",
                            "src": "1916:23:31"
                          }
                        ],
                        "id": 9996,
                        "name": "FunctionCall",
                        "src": "1916:25:31"
                      }
                    ],
                    "id": 9997,
                    "name": "Return",
                    "src": "1909:32:31"
                  }
                ],
                "id": 9998,
                "name": "Block",
                "src": "1899:49:31"
              }
            ],
            "id": 9999,
            "name": "FunctionDefinition",
            "src": "1862:86:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "seizeSignerBonds",
              "scope": 10045,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10000,
                "name": "ParameterList",
                "src": "1979:2:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 10009,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 10001,
                        "name": "ElementaryTypeName",
                        "src": "1998:7:31"
                      }
                    ],
                    "id": 10002,
                    "name": "VariableDeclaration",
                    "src": "1998:7:31"
                  }
                ],
                "id": 10003,
                "name": "ParameterList",
                "src": "1997:9:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 10003
                    },
                    "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": "seizeSignerBonds",
                              "referencedDeclaration": 4698,
                              "type": "function (struct DepositUtils.Deposit storage pointer) returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 10004,
                                "name": "Identifier",
                                "src": "2024:4:31"
                              }
                            ],
                            "id": 10005,
                            "name": "MemberAccess",
                            "src": "2024:21:31"
                          }
                        ],
                        "id": 10006,
                        "name": "FunctionCall",
                        "src": "2024:23:31"
                      }
                    ],
                    "id": 10007,
                    "name": "Return",
                    "src": "2017:30:31"
                  }
                ],
                "id": 10008,
                "name": "Block",
                "src": "2007:47:31"
              }
            ],
            "id": 10009,
            "name": "FunctionDefinition",
            "src": "1954:100:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "distributeFeeRebate",
              "scope": 10045,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10010,
                "name": "ParameterList",
                "src": "2088:2:31"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10011,
                "name": "ParameterList",
                "src": "2098:0:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 10011
                    },
                    "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": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 10012,
                                "name": "Identifier",
                                "src": "2115:4:31"
                              }
                            ],
                            "id": 10013,
                            "name": "MemberAccess",
                            "src": "2115:24:31"
                          }
                        ],
                        "id": 10014,
                        "name": "FunctionCall",
                        "src": "2115:26:31"
                      }
                    ],
                    "id": 10015,
                    "name": "Return",
                    "src": "2108:33:31"
                  }
                ],
                "id": 10016,
                "name": "Block",
                "src": "2098:50:31"
              }
            ],
            "id": 10017,
            "name": "FunctionDefinition",
            "src": "2060:88:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "pushFundsToKeepGroup",
              "scope": 10045,
              "stateMutability": "nonpayable",
              "superFunction": 9841,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_ethValue",
                      "scope": 10029,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 10018,
                        "name": "ElementaryTypeName",
                        "src": "2184:7:31"
                      }
                    ],
                    "id": 10019,
                    "name": "VariableDeclaration",
                    "src": "2184:17:31"
                  }
                ],
                "id": 10020,
                "name": "ParameterList",
                "src": "2183:19:31"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10021,
                "name": "ParameterList",
                "src": "2210:0:31"
              },
              {
                "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": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "pushFundsToKeepGroup",
                              "referencedDeclaration": 4882,
                              "type": "function (struct DepositUtils.Deposit storage pointer,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 10022,
                                "name": "Identifier",
                                "src": "2220:4:31"
                              }
                            ],
                            "id": 10024,
                            "name": "MemberAccess",
                            "src": "2220:25:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10019,
                              "type": "uint256",
                              "value": "_ethValue"
                            },
                            "id": 10025,
                            "name": "Identifier",
                            "src": "2246:9:31"
                          }
                        ],
                        "id": 10026,
                        "name": "FunctionCall",
                        "src": "2220:36:31"
                      }
                    ],
                    "id": 10027,
                    "name": "ExpressionStatement",
                    "src": "2220:36:31"
                  }
                ],
                "id": 10028,
                "name": "Block",
                "src": "2210:53:31"
              }
            ],
            "id": 10029,
            "name": "FunctionDefinition",
            "src": "2154:109:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "enableWithdrawal",
              "scope": 10045,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_withdrawer",
                      "scope": 10044,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 10030,
                        "name": "ElementaryTypeName",
                        "src": "2295:7:31"
                      }
                    ],
                    "id": 10031,
                    "name": "VariableDeclaration",
                    "src": "2295:19:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 10044,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 10032,
                        "name": "ElementaryTypeName",
                        "src": "2316:7:31"
                      }
                    ],
                    "id": 10033,
                    "name": "VariableDeclaration",
                    "src": "2316:15:31"
                  }
                ],
                "id": 10034,
                "name": "ParameterList",
                "src": "2294:38:31"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10035,
                "name": "ParameterList",
                "src": "2340:0:31"
              },
              {
                "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",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "enableWithdrawal",
                              "referencedDeclaration": 4722,
                              "type": "function (struct DepositUtils.Deposit storage pointer,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 10036,
                                "name": "Identifier",
                                "src": "2350:4:31"
                              }
                            ],
                            "id": 10038,
                            "name": "MemberAccess",
                            "src": "2350:21:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10031,
                              "type": "address",
                              "value": "_withdrawer"
                            },
                            "id": 10039,
                            "name": "Identifier",
                            "src": "2372:11:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10033,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 10040,
                            "name": "Identifier",
                            "src": "2385:7:31"
                          }
                        ],
                        "id": 10041,
                        "name": "FunctionCall",
                        "src": "2350:43:31"
                      }
                    ],
                    "id": 10042,
                    "name": "ExpressionStatement",
                    "src": "2350:43:31"
                  }
                ],
                "id": 10043,
                "name": "Block",
                "src": "2340:60:31"
              }
            ],
            "id": 10044,
            "name": "FunctionDefinition",
            "src": "2269:131:31"
          }
        ],
        "id": 10045,
        "name": "ContractDefinition",
        "src": "147:2255:31"
      },
      {
        "attributes": {
          "contractDependencies": [
            1134,
            6251,
            9852
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            10131,
            9852,
            1134,
            6251
          ],
          "name": "TestDepositUtilsSPV",
          "scope": 10132
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "TestDeposit",
                  "referencedDeclaration": 9852,
                  "type": "contract TestDeposit"
                },
                "id": 10046,
                "name": "UserDefinedTypeName",
                "src": "2598:11:31"
              }
            ],
            "id": 10047,
            "name": "InheritanceSpecifier",
            "src": "2598:11:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 10131,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10048,
                "name": "ParameterList",
                "src": "2627:2:31"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10049,
                "name": "ParameterList",
                "src": "2637:0:31"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 10050,
                "name": "Block",
                "src": "2637:63:31"
              }
            ],
            "id": 10051,
            "name": "FunctionDefinition",
            "src": "2616:84:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setPubKey",
              "scope": 10131,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_signingGroupPubkeyX",
                      "scope": 10071,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 10052,
                        "name": "ElementaryTypeName",
                        "src": "2734:7:31"
                      }
                    ],
                    "id": 10053,
                    "name": "VariableDeclaration",
                    "src": "2734:28:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_signingGroupPubkeyY",
                      "scope": 10071,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 10054,
                        "name": "ElementaryTypeName",
                        "src": "2772:7:31"
                      }
                    ],
                    "id": 10055,
                    "name": "VariableDeclaration",
                    "src": "2772:28:31"
                  }
                ],
                "id": 10056,
                "name": "ParameterList",
                "src": "2724:82:31"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 10057,
                "name": "ParameterList",
                "src": "2814:0:31"
              },
              {
                "children": [
                  {
                    "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": "signingGroupPubkeyX",
                              "referencedDeclaration": 3864,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 10058,
                                "name": "Identifier",
                                "src": "2824:4:31"
                              }
                            ],
                            "id": 10060,
                            "name": "MemberAccess",
                            "src": "2824:24:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10053,
                              "type": "bytes32",
                              "value": "_signingGroupPubkeyX"
                            },
                            "id": 10061,
                            "name": "Identifier",
                            "src": "2851:20:31"
                          }
                        ],
                        "id": 10062,
                        "name": "Assignment",
                        "src": "2824:47:31"
                      }
                    ],
                    "id": 10063,
                    "name": "ExpressionStatement",
                    "src": "2824:47:31"
                  },
                  {
                    "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": "signingGroupPubkeyY",
                              "referencedDeclaration": 3866,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 10064,
                                "name": "Identifier",
                                "src": "2881:4:31"
                              }
                            ],
                            "id": 10066,
                            "name": "MemberAccess",
                            "src": "2881:24:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10055,
                              "type": "bytes32",
                              "value": "_signingGroupPubkeyY"
                            },
                            "id": 10067,
                            "name": "Identifier",
                            "src": "2908:20:31"
                          }
                        ],
                        "id": 10068,
                        "name": "Assignment",
                        "src": "2881:47:31"
                      }
                    ],
                    "id": 10069,
                    "name": "ExpressionStatement",
                    "src": "2881:47:31"
                  }
                ],
                "id": 10070,
                "name": "Block",
                "src": "2814:121:31"
              }
            ],
            "id": 10071,
            "name": "FunctionDefinition",
            "src": "2706:229:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "validateAndParseFundingSPVProof",
              "scope": 10131,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txVersion",
                      "scope": 10107,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 10072,
                        "name": "ElementaryTypeName",
                        "src": "2991:6:31"
                      }
                    ],
                    "id": 10073,
                    "name": "VariableDeclaration",
                    "src": "2991:17:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txInputVector",
                      "scope": 10107,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 10074,
                        "name": "ElementaryTypeName",
                        "src": "3018:5:31"
                      }
                    ],
                    "id": 10075,
                    "name": "VariableDeclaration",
                    "src": "3018:27:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txOutputVector",
                      "scope": 10107,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 10076,
                        "name": "ElementaryTypeName",
                        "src": "3055:5:31"
                      }
                    ],
                    "id": 10077,
                    "name": "VariableDeclaration",
                    "src": "3055:28:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txLocktime",
                      "scope": 10107,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 10078,
                        "name": "ElementaryTypeName",
                        "src": "3093:6:31"
                      }
                    ],
                    "id": 10079,
                    "name": "VariableDeclaration",
                    "src": "3093:18:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_fundingOutputIndex",
                      "scope": 10107,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 10080,
                        "name": "ElementaryTypeName",
                        "src": "3121:5:31"
                      }
                    ],
                    "id": 10081,
                    "name": "VariableDeclaration",
                    "src": "3121:25:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_merkleProof",
                      "scope": 10107,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 10082,
                        "name": "ElementaryTypeName",
                        "src": "3156:5:31"
                      }
                    ],
                    "id": 10083,
                    "name": "VariableDeclaration",
                    "src": "3156:25:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txIndexInBlock",
                      "scope": 10107,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 10084,
                        "name": "ElementaryTypeName",
                        "src": "3191:7:31"
                      }
                    ],
                    "id": 10085,
                    "name": "VariableDeclaration",
                    "src": "3191:23:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bitcoinHeaders",
                      "scope": 10107,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 10086,
                        "name": "ElementaryTypeName",
                        "src": "3224:5:31"
                      }
                    ],
                    "id": 10087,
                    "name": "VariableDeclaration",
                    "src": "3224:28:31"
                  }
                ],
                "id": 10088,
                "name": "ParameterList",
                "src": "2981:277:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_valueBytes",
                      "scope": 10107,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 10089,
                        "name": "ElementaryTypeName",
                        "src": "3280:6:31"
                      }
                    ],
                    "id": 10090,
                    "name": "VariableDeclaration",
                    "src": "3280:18:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_utxoOutpoint",
                      "scope": 10107,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 10091,
                        "name": "ElementaryTypeName",
                        "src": "3300:5:31"
                      }
                    ],
                    "id": 10092,
                    "name": "VariableDeclaration",
                    "src": "3300:26:31"
                  }
                ],
                "id": 10093,
                "name": "ParameterList",
                "src": "3279:48:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 10093
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple(bytes8,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"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "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": "validateAndParseFundingSPVProof",
                              "referencedDeclaration": 4237,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes4,bytes memory,bytes memory,bytes4,uint8,bytes memory,uint256,bytes memory) view returns (bytes8,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 10094,
                                "name": "Identifier",
                                "src": "3344:4:31"
                              }
                            ],
                            "id": 10095,
                            "name": "MemberAccess",
                            "src": "3344:36:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10073,
                              "type": "bytes4",
                              "value": "_txVersion"
                            },
                            "id": 10096,
                            "name": "Identifier",
                            "src": "3394:10:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10075,
                              "type": "bytes memory",
                              "value": "_txInputVector"
                            },
                            "id": 10097,
                            "name": "Identifier",
                            "src": "3418:14:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10077,
                              "type": "bytes memory",
                              "value": "_txOutputVector"
                            },
                            "id": 10098,
                            "name": "Identifier",
                            "src": "3446:15:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10079,
                              "type": "bytes4",
                              "value": "_txLocktime"
                            },
                            "id": 10099,
                            "name": "Identifier",
                            "src": "3475:11:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10081,
                              "type": "uint8",
                              "value": "_fundingOutputIndex"
                            },
                            "id": 10100,
                            "name": "Identifier",
                            "src": "3500:19:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10083,
                              "type": "bytes memory",
                              "value": "_merkleProof"
                            },
                            "id": 10101,
                            "name": "Identifier",
                            "src": "3533:12:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10085,
                              "type": "uint256",
                              "value": "_txIndexInBlock"
                            },
                            "id": 10102,
                            "name": "Identifier",
                            "src": "3559:15:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10087,
                              "type": "bytes memory",
                              "value": "_bitcoinHeaders"
                            },
                            "id": 10103,
                            "name": "Identifier",
                            "src": "3588:15:31"
                          }
                        ],
                        "id": 10104,
                        "name": "FunctionCall",
                        "src": "3344:269:31"
                      }
                    ],
                    "id": 10105,
                    "name": "Return",
                    "src": "3337:276:31"
                  }
                ],
                "id": 10106,
                "name": "Block",
                "src": "3327:293:31"
              }
            ],
            "id": 10107,
            "name": "FunctionDefinition",
            "src": "2941:679:31"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "checkProofFromTxId",
              "scope": 10131,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bitcoinTxId",
                      "scope": 10130,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 10108,
                        "name": "ElementaryTypeName",
                        "src": "3663:7:31"
                      }
                    ],
                    "id": 10109,
                    "name": "VariableDeclaration",
                    "src": "3663:20:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_merkleProof",
                      "scope": 10130,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 10110,
                        "name": "ElementaryTypeName",
                        "src": "3693:5:31"
                      }
                    ],
                    "id": 10111,
                    "name": "VariableDeclaration",
                    "src": "3693:25:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_index",
                      "scope": 10130,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 10112,
                        "name": "ElementaryTypeName",
                        "src": "3728:7:31"
                      }
                    ],
                    "id": 10113,
                    "name": "VariableDeclaration",
                    "src": "3728:14:31"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bitcoinHeaders",
                      "scope": 10130,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 10114,
                        "name": "ElementaryTypeName",
                        "src": "3752:5:31"
                      }
                    ],
                    "id": 10115,
                    "name": "VariableDeclaration",
                    "src": "3752:28:31"
                  }
                ],
                "id": 10116,
                "name": "ParameterList",
                "src": "3653:133:31"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 10130,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 10117,
                        "name": "ElementaryTypeName",
                        "src": "3808:7:31"
                      }
                    ],
                    "id": 10118,
                    "name": "VariableDeclaration",
                    "src": "3808:7:31"
                  }
                ],
                "id": 10119,
                "name": "ParameterList",
                "src": "3807:9:31"
              },
              {
                "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"
                                },
                                {
                                  "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": 536,
                                  "type": "struct DepositUtils.Deposit storage ref",
                                  "value": "self"
                                },
                                "id": 10120,
                                "name": "Identifier",
                                "src": "3827:4:31"
                              }
                            ],
                            "id": 10122,
                            "name": "MemberAccess",
                            "src": "3827:23:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10109,
                              "type": "bytes32",
                              "value": "_bitcoinTxId"
                            },
                            "id": 10123,
                            "name": "Identifier",
                            "src": "3851:12:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10111,
                              "type": "bytes memory",
                              "value": "_merkleProof"
                            },
                            "id": 10124,
                            "name": "Identifier",
                            "src": "3865:12:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10113,
                              "type": "uint256",
                              "value": "_index"
                            },
                            "id": 10125,
                            "name": "Identifier",
                            "src": "3879:6:31"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10115,
                              "type": "bytes memory",
                              "value": "_bitcoinHeaders"
                            },
                            "id": 10126,
                            "name": "Identifier",
                            "src": "3887:15:31"
                          }
                        ],
                        "id": 10127,
                        "name": "FunctionCall",
                        "src": "3827:76:31"
                      }
                    ],
                    "id": 10128,
                    "name": "ExpressionStatement",
                    "src": "3827:76:31"
                  }
                ],
                "id": 10129,
                "name": "Block",
                "src": "3817:93:31"
              }
            ],
            "id": 10130,
            "name": "FunctionDefinition",
            "src": "3626:284:31"
          }
        ],
        "id": 10131,
        "name": "ContractDefinition",
        "src": "2566:1346:31"
      }
    ],
    "id": 10132,
    "name": "SourceUnit",
    "src": "0:3913:31"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T11:52:09.343Z",
  "devdoc": {
    "methods": {
      "auctionValue()": {
        "details": "This call will revert if the deposit is not in a state where an      auction is currently in progress.",
        "return": "The value in wei that would be received in exchange for the         deposit's lot size in TBTC if `purchaseSignerBondsAtAuction`         were called at the time this function is called."
      },
      "collateralizationPercentage()": {
        "details": "This value represents the percentage of the backing BTC value the      signers currently must hold as bond.",
        "return": "The current collateralization level for this deposit."
      },
      "currentState()": {
        "details": "We implement this because contracts don't handle foreign enums      well. See `DepositStates` for more info on states.",
        "return": "The 0-indexed state from the DepositStates enum."
      },
      "exitCourtesyCall()": {
        "details": "This call will revert if collateral is still below the      undercollateralized threshold according to the price feed."
      },
      "fundingInfo()": {
        "details": "This call will revert if the deposit is not in a state where the      funding info should be valid. In particular, before funding proof      is successfully submitted (i.e. in states START,      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), none of      these values are set or valid.",
        "return": "A tuple of (uxtoValueBytes, fundedAt, uxtoOutpoint)."
      },
      "getOwnerRedemptionTbtcRequirement(address)": {
        "params": {
          "_redeemer": "The assumed owner of the deposit's TDT ."
        },
        "return": "The amount in TBTC needed to redeem the deposit."
      },
      "getRedemptionTbtcRequirement(address)": {
        "details": "This call will revert if redemption is not possible by _redeemer.",
        "params": {
          "_redeemer": "The deposit redeemer whose TBTC requirement is being        requested."
        },
        "return": "The amount in TBTC needed by the `_redeemer` to redeem the         deposit."
      },
      "inActive()": {
        "return": "True if state is ACTIVE, false otherwise."
      },
      "increaseRedemptionFee(bytes8,bytes8)": {
        "details": "This call will revert if the fee is already at its maximum, or if      the new requested fee is not a multiple of the initial requested      fee. Transaction fees can only be bumped by the amount of the      initial requested fee. Calling this sends the deposit back to      the `AWAITING_WITHDRAWAL_SIGNATURE` state and requires the signers      to `provideRedemptionSignature` for the new output value in a      timely fashion.",
        "params": {
          "_newOutputValueBytes": "The new output's value.",
          "_previousOutputValueBytes": "The previous output's value."
        }
      },
      "initialCollateralizedPercent()": {
        "details": "This value represents the percentage of the backing BTC value      the signers hold initially. It is set at creation time.",
        "return": "The initial collateralization level for this deposit."
      },
      "initialize(address)": {
        "details": "Since this function is not access-controlled, it should be called      transactionally with contract instantiation. In cases where a      regular contract directly inherits from DepositFactoryAuthority,      that should happen in the constructor. In cases where the inheritor      is binstead used via a clone factory, the same function that      creates a new clone should also trigger initialization."
      },
      "keepAddress()": {
        "details": "The keep contract address is saved on Deposit initialization.",
        "return": "Address of the Keep contract."
      },
      "lotSizeSatoshis()": {
        "return": "uint64 lot size in satoshis."
      },
      "lotSizeTbtc()": {
        "details": "This is the same as lotSizeSatoshis(), but is multiplied to scale      to 18 decimal places.",
        "return": "uint256 lot size in TBTC precision (max 18 decimal places)."
      },
      "notifyCourtesyCall()": {
        "details": "This call will revert if the signers are not in fact      undercollateralized according to the price feed. After      TBTCConstants.COURTESY_CALL_DURATION, courtesy call times out and      regular abort liquidation occurs; see      `notifyCourtesyTimedOut`."
      },
      "notifyCourtesyCallExpired()": {
        "details": "This call will revert if the courtesy call period has not in fact      expired or is not in the courtesy call state. Courtesy call      expiration is treated as an abort, and is handled by seizing signer      bonds and putting them up for auction for the lot size amount in      TBTC (see `purchaseSignerBondsAtAuction`). Emits a      LiquidationStarted event. The caller is captured as the liquidation      initiator, and is eligible for 50% of any bond left after the      auction is completed."
      },
      "notifyFundingTimedOut()": {
        "details": "This is considered a funder fault, and the funder's payment for      opening the deposit is not refunded. Emits a SetupFailed event.      Reverts if the funding timeout has not yet elapsed, or if the      deposit is not currently awaiting funding proof."
      },
      "notifyRedemptionProofTimedOut()": {
        "details": "This call will revert if the deposit is not currently awaiting a      signature or if the allotted time has not yet elapsed. This is      considered an abort, and is punished by seizing signer bonds and      putting them up for auction for the lot size amount in TBTC (see      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.      The caller is captured as the liquidation initiator, and      is eligible for 50% of any bond left after the auction is     completed."
      },
      "notifyRedemptionSignatureTimedOut()": {
        "details": "This is considered an abort, and is punished by seizing signer      bonds and putting them up for auction. Emits a LiquidationStarted      event and a Liquidated event and sends the full signer bond to the      redeemer. Reverts if the deposit is not currently awaiting a      signature or if the allotted time has not yet elapsed. The caller      is captured as the liquidation initiator, and is eligible for 50%      of any bond left after the auction is completed."
      },
      "notifySignerSetupFailed()": {
        "details": "This is considered a signer fault, and the signers' bonds are used      to make the deposit setup fee available for withdrawal by the TDT      holder as a refund. The remainder of the signers' bonds are      returned to the bonding pool and the signers are released from any      further responsibilities. Reverts if the deposit is not awaiting      signer setup or if the signing group formation timeout has not      elapsed."
      },
      "notifyUndercollateralizedLiquidation()": {
        "details": "Calls out to the system for oracle info.This call will revert if the signers are not in fact severely      undercollateralized according to the price feed. Severe      undercollateralization is treated as an abort, and is handled by      seizing signer bonds and putting them up for auction in exchange      for the lot size amount in TBTC (see      `purchaseSignerBondsAtAuction`). Emits a LiquidationStarted event.      The caller is captured as the liquidation initiator, and is      eligible for 50% of any bond left after the auction is completed."
      },
      "provideBTCFundingProof(bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)": {
        "details": "Takes a pre-parsed transaction and calculates values needed to      verify funding.",
        "params": {
          "_bitcoinHeaders": "Single bytestring of 80-byte bitcoin headers,        lowest height first.",
          "_fundingOutputIndex": "Index of funding output in _txOutputVector        (0-indexed).",
          "_merkleProof": "The merkle proof of transaction inclusion in a        block.",
          "_txIndexInBlock": "Transaction index in the 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 little-endian)."
        }
      },
      "provideECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)": {
        "details": "This call will revert if the underlying keep cannot verify that      there was fraud. Fraud is handled by seizing signer bonds and      putting them up for auction in exchange for the lot size amount in      TBTC (see `purchaseSignerBondsAtAuction`). Emits a      LiquidationStarted event. The caller is captured as the liquidation      initiator, and is eligible for any bond left after the auction is      completed.",
        "params": {
          "_preimage": "The sha256 preimage of the digest.",
          "_r": "Signature R value.",
          "_s": "Signature S value.",
          "_signedDigest": "The digest signed by the signature (v,r,s) tuple.",
          "_v": "Signature recovery value."
        }
      },
      "provideFundingECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)": {
        "details": "Calls out to the keep to verify if there was fraud.",
        "params": {
          "_preimage": "The sha256 preimage of the digest.",
          "_r": "Signature R value.",
          "_s": "Signature S value.",
          "_signedDigest": "The digest signed by the signature (v,r,s) tuple.",
          "_v": "Signature recovery value."
        }
      },
      "provideRedemptionProof(bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)": {
        "details": "Takes a pre-parsed transaction and calculates values needed to      verify funding. Signers can have their bonds seized if this is not      called within `TBTCConstants.REDEMPTION_PROOF_TIMEOUT` seconds of      a redemption signature being provided.",
        "params": {
          "_bitcoinHeaders": "Single bytestring of 80-byte bitcoin headers,        lowest height first.",
          "_merkleProof": "The merkle proof of transaction inclusion in a        block.",
          "_txIndexInBlock": "Transaction index in the 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 little-endian)."
        }
      },
      "provideRedemptionSignature(uint8,bytes32,bytes32)": {
        "details": "The signers will be penalized if this function is not called      correctly within `TBTCConstants.REDEMPTION_SIGNATURE_TIMEOUT`      seconds of a redemption request or fee increase being received.",
        "params": {
          "_r": "Signature R value.",
          "_s": "Signature S value. Should be in the low half of secp256k1        curve's order.",
          "_v": "Signature recovery value."
        }
      },
      "purchaseSignerBondsAtAuction()": {
        "details": "The amount of ETH given for the transferred TBTC can be read using      the `auctionValue` function; note, however, that the function's      value is only static during the specific block it is queried, as it      varies by block timestamp."
      },
      "remainingTerm()": {
        "details": "The value accuracy is not guaranteed since block.timestmap can be      lightly manipulated by miners.",
        "return": "The remaining term of the deposit in seconds. 0 if already at         term."
      },
      "requestFunderAbort(bytes)": {
        "details": "This is a self-admitted funder fault, and is only be callable by      the TDT holder. This function emits the FunderAbortRequested event,      but stores no additional state.",
        "params": {
          "_abortOutputScript": "The output script the funder wishes to request        a return of their UTXO to."
        }
      },
      "requestRedemption(bytes8,bytes)": {
        "details": "The amount of TBTC needed to redeem can be looked up using the      `getRedemptionTbtcRequirement` or `getOwnerRedemptionTbtcRequirement`      functions.",
        "params": {
          "_outputValueBytes": "The 8-byte little-endian output size. The         difference between this value and the lot size of the deposit         will be paid as a fee to the Bitcoin miners when the signed         transaction is broadcast.",
          "_redeemerOutputScript": "The redeemer's length-prefixed output         script."
        }
      },
      "retrieveSignerPubkey()": {
        "details": "Stores the pubkey as 2 bytestrings, X and Y. Emits a      RegisteredPubkey event with the two components. Reverts if the      deposit is not awaiting signer setup, if the generated public key      is unset or has incorrect length, or if the public key has a 0      X or Y value."
      },
      "severelyUndercollateralizedThresholdPercent()": {
        "details": "This collateralization level is critical. If the collateralization      level falls below this percentage the Deposit can get liquidated.      This value represents the percentage of the backing BTC value the      signers must hold as bond in order to not be severely      undercollateralized. It is set at creation time. Note that the      value for new deposits in TBTCSystem can be changed by governance,      but the value for a particular deposit is static once the deposit      is created.",
        "return": "The severely undercollateralized level for this deposit."
      },
      "signerFeeTbtc()": {
        "details": "This is the one-time fee required by the signers to perform the      tasks needed to maintain a decentralized and trustless model for      tBTC. It is a percentage of the deposit's lot size.",
        "return": "Fee amount in TBTC."
      },
      "transferAndRequestRedemption(bytes8,bytes,address)": {
        "details": "Performs the same action as requestRedemption, but transfers      ownership of the deposit to the specified _finalRecipient. Used as      a utility helper for the vending machine's shortcut      TBTC->redemption path.",
        "params": {
          "_finalRecipient": "The address to receive the TDT and later be recorded as deposit redeemer.",
          "_outputValueBytes": "The 8-byte little-endian output size.",
          "_redeemerOutputScript": "The redeemer's length-prefixed output script."
        }
      },
      "undercollateralizedThresholdPercent()": {
        "details": "This collateralization level is semi-critical. If the      collateralization level falls below this percentage the Deposit can      be courtesy-called by calling `notifyCourtesyCall`. This value      represents the percentage of the backing BTC value the signers must      hold as bond in order to not be undercollateralized. It is set at      creation time. Note that the value for new deposits in TBTCSystem      can be changed by governance, but the value for a particular      deposit is static once the deposit is created.",
        "return": "The undercollateralized level for this deposit."
      },
      "utxoValue()": {
        "details": "This call will revert if the deposit is not in a state where the      UTXO info should be valid. In particular, before funding proof is      successfully submitted (i.e. in states START,      AWAITING_SIGNER_SETUP, and AWAITING_BTC_FUNDING_PROOF), this value      would not be valid.",
        "return": "The value of the funding UTXO in satoshis."
      },
      "withdrawFunds()": {
        "details": "Withdrawals can only happen when a contract is in an end-state."
      },
      "withdrawableAmount()": {
        "details": "Generally ETH is only available to withdraw after the deposit      reaches a closed state. The amount reported is for the sender, and      can be withdrawn using `withdrawFunds` if the deposit is in an end      state.",
        "return": "The withdraw allowance in wei."
      }
    }
  },
  "userdoc": {
    "methods": {
      "auctionValue()": {
        "notice": "Calculates the amount of value at auction right now."
      },
      "collateralizationPercentage()": {
        "notice": "Get the current collateralization level for this Deposit."
      },
      "currentState()": {
        "notice": "Get the integer representing the current state."
      },
      "exitCourtesyCall()": {
        "notice": "Notify the contract that the signers' bond value has recovered         enough to be considered sufficiently collateralized."
      },
      "fundingInfo()": {
        "notice": "Returns information associated with the funding UXTO."
      },
      "getOwnerRedemptionTbtcRequirement(address)": {
        "notice": "Get TBTC amount required for redemption assuming _redeemer         is this deposit's owner (TDT holder)."
      },
      "getRedemptionTbtcRequirement(address)": {
        "notice": "Get TBTC amount required for redemption by a specified         _redeemer."
      },
      "inActive()": {
        "notice": "Check if the Deposit is in ACTIVE state."
      },
      "increaseRedemptionFee(bytes8,bytes8)": {
        "notice": "Anyone may request a signature for a transaction with an         increased Bitcoin transaction fee."
      },
      "initialCollateralizedPercent()": {
        "notice": "Get the initial collateralization level for this Deposit."
      },
      "initialize(address)": {
        "notice": "Set the address of the System contract on contract         initialization."
      },
      "keepAddress()": {
        "notice": "Get the contract address of the BondedECDSAKeep associated with         this Deposit."
      },
      "lotSizeSatoshis()": {
        "notice": "Get this deposit's BTC lot size in satoshis."
      },
      "lotSizeTbtc()": {
        "notice": "Get this deposit's lot size in TBTC."
      },
      "notifyCourtesyCall()": {
        "notice": "Notify the contract that the signers are undercollateralized."
      },
      "notifyCourtesyCallExpired()": {
        "notice": "Notify the contract that the courtesy period has expired and the         deposit should move into liquidation."
      },
      "notifyFundingTimedOut()": {
        "notice": "Notify the contract that the funding phase of the deposit has         timed out if `provideBTCFundingProof` is not successfully called         within the allotted time. Any sent BTC is left under control of         the signer group, and the funder can use `requestFunderAbort` to         request an at-signer-discretion return of any BTC sent to a         deposit that has been notified of a funding timeout."
      },
      "notifyRedemptionProofTimedOut()": {
        "notice": "Notify the contract that the deposit has failed to receive a         redemption proof in the allotted time."
      },
      "notifyRedemptionSignatureTimedOut()": {
        "notice": "Notify the contract that the signers have failed to produce a         signature for a redemption request in the allotted time."
      },
      "notifySignerSetupFailed()": {
        "notice": "Notify the contract that signing group setup has timed out if         retrieveSignerPubkey is not successfully called within the         allotted time."
      },
      "notifyUndercollateralizedLiquidation()": {
        "notice": "Notify the contract that the signers are undercollateralized."
      },
      "provideBTCFundingProof(bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)": {
        "notice": "Anyone may submit a funding proof to the deposit showing that         a transaction was submitted and sufficiently confirmed on the         Bitcoin chain transferring the deposit lot size's amount of BTC         to the signer-controlled private key corresopnding to this         deposit. This will move the deposit into an active state."
      },
      "provideECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)": {
        "notice": "Anyone can provide a signature corresponding to the signers'         public key that was not requested to prove fraud. A redemption         request and a redemption fee increase are the only ways to         request a signature from the signers."
      },
      "provideFundingECDSAFraudProof(uint8,bytes32,bytes32,bytes32,bytes)": {
        "notice": "Anyone can provide a signature corresponding to the signers'         public key to prove fraud during funding. Note that during         funding no signature has been requested from the signers, so         any signature is effectively fraud."
      },
      "provideRedemptionProof(bytes4,bytes,bytes,bytes4,bytes,uint256,bytes)": {
        "notice": "Anyone may submit a redemption proof to the deposit showing that         a transaction was submitted and sufficiently confirmed on the         Bitcoin chain transferring the deposit lot size's amount of BTC         from the signer-controlled private key corresponding to this         deposit to the requested redemption output script. This will         move the deposit into a redeemed state."
      },
      "provideRedemptionSignature(uint8,bytes32,bytes32)": {
        "notice": "Anyone may provide a withdrawal signature if it was requested."
      },
      "purchaseSignerBondsAtAuction()": {
        "notice": "Closes an auction and purchases the signer bonds by transferring         the lot size in TBTC to the redeemer, if there is one, or to the         TDT holder if not. Any bond amount that is not currently up for         auction is either made available for the liquidation initiator         to withdraw (for fraud) or split 50-50 between the initiator and         the signers (for abort or collateralization issues)."
      },
      "remainingTerm()": {
        "notice": "Retrieve the remaining term of the deposit in seconds."
      },
      "requestFunderAbort(bytes)": {
        "notice": "Requests a funder abort for a failed-funding deposit; that is,         requests the return of a sent UTXO to _abortOutputScript. It         imposes no requirements on the signing group. Signers should         send their UTXO to the requested output script, but do so at         their discretion and with no penalty for failing to do so. This         can be used for example when a UTXO is sent that is the wrong         size for the lot."
      },
      "requestRedemption(bytes8,bytes)": {
        "notice": "Requests redemption of this deposit, meaning the transmission,         by the signers, of the deposit's UTXO to the specified Bitocin         output script. Requires approving the deposit to spend the         amount of TBTC needed to redeem."
      },
      "retrieveSignerPubkey()": {
        "notice": "Notify the contract that the ECDSA keep has generated a public         key so the deposit contract can pull it in."
      },
      "severelyUndercollateralizedThresholdPercent()": {
        "notice": "Get the severe undercollateralization level for this Deposit."
      },
      "signerFeeTbtc()": {
        "notice": "Get the signer fee for this deposit, in TBTC."
      },
      "transferAndRequestRedemption(bytes8,bytes,address)": {
        "notice": "This function can only be called by the vending machine."
      },
      "undercollateralizedThresholdPercent()": {
        "notice": "Get the undercollateralization level for this Deposit."
      },
      "utxoValue()": {
        "notice": "Get the value of the funding UTXO."
      },
      "withdrawFunds()": {
        "notice": "Withdraw the ETH balance of the deposit allotted to the caller."
      },
      "withdrawableAmount()": {
        "notice": "Get caller's ETH withdraw allowance."
      }
    }
  }
}