{
  "contractName": "OnDemandSPV",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_genesisHeader",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_height",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_periodStart",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_firstID",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_first",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_last",
          "type": "bytes32"
        }
      ],
      "name": "Extension",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_requester",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_paysValue",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_spends",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_pays",
          "type": "bytes"
        }
      ],
      "name": "NewProofRequest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_from",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_to",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_gcd",
          "type": "bytes32"
        }
      ],
      "name": "NewTip",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "RequestClosed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_txid",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "RequestFilled",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "BASE_COST",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "HEIGHT_INTERVAL",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_anchor",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_headers",
          "type": "bytes"
        }
      ],
      "name": "addHeaders",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_oldPeriodStartHeader",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_oldPeriodEndHeader",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_headers",
          "type": "bytes"
        }
      ],
      "name": "addHeadersWithRetarget",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_digest",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_offset",
          "type": "uint256"
        }
      ],
      "name": "findAncestor",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_digest",
          "type": "bytes32"
        }
      ],
      "name": "findHeight",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getBestKnownDigest",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentEpochDifficulty",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLastReorgCommonAncestor",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getPrevEpochDifficulty",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRelayGenesis",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_ancestor",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_descendant",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_limit",
          "type": "uint256"
        }
      ],
      "name": "isAncestor",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "latestValidatedTx",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_ancestor",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_currentBest",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_newBest",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_limit",
          "type": "uint256"
        }
      ],
      "name": "markNewHeaviest",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nextID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "remoteGasAllowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "cancelRequest",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLatestValidatedTx",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "getRequest",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "spends",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "pays",
          "type": "bytes32"
        },
        {
          "internalType": "uint64",
          "name": "paysValue",
          "type": "uint64"
        },
        {
          "internalType": "uint8",
          "name": "state",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "consumer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "numConfs",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "notBefore",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_spends",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_pays",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_paysValue",
          "type": "uint64"
        },
        {
          "internalType": "address",
          "name": "_consumer",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "_numConfs",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "_notBefore",
          "type": "uint256"
        }
      ],
      "name": "request",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_header",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_proof",
          "type": "bytes"
        },
        {
          "internalType": "bytes4",
          "name": "_version",
          "type": "bytes4"
        },
        {
          "internalType": "bytes4",
          "name": "_locktime",
          "type": "bytes4"
        },
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "internalType": "uint16",
          "name": "_reqIndices",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_vin",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_vout",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "provideProof",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_genesisHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_periodStart\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_firstID\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_first\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_last\",\"type\":\"bytes32\"}],\"name\":\"Extension\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_requester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_paysValue\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_spends\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_pays\",\"type\":\"bytes\"}],\"name\":\"NewProofRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_from\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_to\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_gcd\",\"type\":\"bytes32\"}],\"name\":\"NewTip\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"RequestClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_txid\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"RequestFilled\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"BASE_COST\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"HEIGHT_INTERVAL\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_anchor\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_headers\",\"type\":\"bytes\"}],\"name\":\"addHeaders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_oldPeriodStartHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_oldPeriodEndHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_headers\",\"type\":\"bytes\"}],\"name\":\"addHeadersWithRetarget\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"cancelRequest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_offset\",\"type\":\"uint256\"}],\"name\":\"findAncestor\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"}],\"name\":\"findHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getBestKnownDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentEpochDifficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getLastReorgCommonAncestor\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getLatestValidatedTx\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getPrevEpochDifficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getRelayGenesis\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"getRequest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"spends\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"pays\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"paysValue\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"numConfs\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"notBefore\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_ancestor\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_descendant\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_limit\",\"type\":\"uint256\"}],\"name\":\"isAncestor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"latestValidatedTx\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_ancestor\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_currentBest\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_newBest\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_limit\",\"type\":\"uint256\"}],\"name\":\"markNewHeaviest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nextID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_header\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"_version\",\"type\":\"bytes4\"},{\"internalType\":\"bytes4\",\"name\":\"_locktime\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"_reqIndices\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_vin\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_vout\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"provideProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"remoteGasAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_spends\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_pays\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"_paysValue\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_consumer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_numConfs\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_notBefore\",\"type\":\"uint256\"}],\"name\":\"request\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"addHeaders(bytes,bytes)\":{\"details\":\"We check integrity and consistency of the header chain\",\"params\":{\"_anchor\":\"The header immediately preceeding the new chain\",\"_headers\":\"A tightly-packed list of 80-byte Bitcoin headers\"},\"return\":\"True if successfully written, error otherwise\"},\"addHeadersWithRetarget(bytes,bytes,bytes)\":{\"details\":\"Checks the retarget, the heights, and the linkage\",\"params\":{\"_headers\":\"A tightly-packed list of 80-byte Bitcoin headers\",\"_oldPeriodEndHeader\":\"The last header in the difficulty period being closed\",\"_oldPeriodStartHeader\":\"The first header in the difficulty period being closed\"},\"return\":\"True if successfully written, error otherwise\"},\"cancelRequest(uint256)\":{\"details\":\"Prevents the relay from forwarding tx infromation\",\"params\":{\"_requestID\":\"The ID of the request to be cancelled\"},\"return\":\"True if succesful, error otherwise\"},\"constructor\":{\"details\":\"We don't check this AT ALL really. Don't use relays with bad genesis\",\"params\":{\"_genesisHeader\":\"The starting header\",\"_height\":\"The starting height\",\"_periodStart\":\"The hash of the first header in the genesis epoch\"}},\"findAncestor(bytes32,uint256)\":{\"details\":\"Will fail if the header is unknown\",\"params\":{\"_digest\":\"The header digest to search for\"},\"return\":\"The height of the header, or error if unknown\"},\"findHeight(bytes32)\":{\"details\":\"Will fail if the header is unknown\",\"params\":{\"_digest\":\"The header digest to search for\"},\"return\":\"The height of the header, or error if unknown\"},\"getBestKnownDigest()\":{\"details\":\"This updated only by calling markNewHeaviest\",\"return\":\"The hash of the best marked chain tip\"},\"getCurrentEpochDifficulty()\":{\"details\":\"This is updated when a new heavist header has a new diff\",\"return\":\"The difficulty of the bestKnownDigest\"},\"getLastReorgCommonAncestor()\":{\"details\":\"This is updated only by calling markNewHeaviest\",\"return\":\"The hash of the shared ancestor of the most recent fork\"},\"getPrevEpochDifficulty()\":{\"details\":\"This is updated when a difficulty change is accepted\",\"return\":\"The difficulty of the previous epoch\"},\"getRelayGenesis()\":{\"details\":\"This is an initialization parameter\",\"return\":\"The hash of the first block of the relay\"},\"getRequest(uint256)\":{\"details\":\"Requests ids are numerical\",\"params\":{\"_requestID\":\"The numerical ID of the request\"},\"return\":\"A tuple representation of the request struct\"},\"isAncestor(bytes32,bytes32,uint256)\":{\"details\":\"Limit the amount of lookups (and thus gas usage) with _limit\",\"params\":{\"_ancestor\":\"The prospective ancestor\",\"_descendant\":\"The descendant to check\",\"_limit\":\"The maximum number of blocks to check\"},\"return\":\"true if ancestor is at most limit blocks lower than descendant, otherwise false\"},\"markNewHeaviest(bytes32,bytes,bytes,uint256)\":{\"details\":\"We don't check this AT ALL really. Don't use relays with bad genesis\",\"params\":{\"_ancestor\":\"The digest of the most recent common ancestor\",\"_currentBest\":\"The 80-byte header referenced by bestKnownDigest\",\"_limit\":\"Limit the amount of traversal of the chain\",\"_newBest\":\"The 80-byte header to mark as the new best\"},\"return\":\"True if successfully updates bestKnownDigest, error otherwise\"},\"provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)\":{\"details\":\"The caller must specify which inputs, which outputs, and which request\",\"params\":{\"_header\":\"The header containing the merkleroot committing to the tx\",\"_index\":\"The index of the tx in the merkle tree's leaves\",\"_locktime\":\"The tx locktime, always the last 4 bytes of the tx\",\"_proof\":\"The merkle proof intermediate nodes\",\"_reqIndices\":\"The input and output index to check against the request, packed\",\"_requestID\":\"The id of the request that has been triggered\",\"_version\":\"The tx version, always the first 4 bytes of the tx\",\"_vin\":\"The tx input vector\",\"_vout\":\"The tx output vector\"},\"return\":\"True if succesful, error otherwise\"},\"request(bytes,bytes,uint64,address,uint8,uint256)\":{\"details\":\"The request can be a spent utxo and/or a created utxo\",\"params\":{\"_consumer\":\"The address of a ISPVConsumer exposing spv\",\"_notBefore\":\"A timestamp before which proofs are not accepted\",\"_numConfs\":\"The minimum number of Bitcoin confirmations to accept\",\"_pays\":\"An output script that must be paid in acceptable txns (optional)\",\"_paysValue\":\"A minimum value that must be paid to the output script (optional)\",\"_spends\":\"An outpoint that must be spent in acceptable txns (optional)\"},\"return\":\"A unique request ID.\"}}},\"userdoc\":{\"methods\":{\"addHeaders(bytes,bytes)\":{\"notice\":\"Adds headers to storage after validating\"},\"addHeadersWithRetarget(bytes,bytes,bytes)\":{\"notice\":\"Adds headers to storage, performs additional validation of retarget\"},\"cancelRequest(uint256)\":{\"notice\":\"Cancel a bitcoin event request.\"},\"constructor\":\"Gives a starting point for the relay\",\"findAncestor(bytes32,uint256)\":{\"notice\":\"Finds an ancestor for a block by its digest\"},\"findHeight(bytes32)\":{\"notice\":\"Finds the height of a header by its digest\"},\"getBestKnownDigest()\":{\"notice\":\"Getter for bestKnownDigest\"},\"getCurrentEpochDifficulty()\":{\"notice\":\"Getter for currentEpochDiff\"},\"getLastReorgCommonAncestor()\":{\"notice\":\"Getter for relayGenesis\"},\"getPrevEpochDifficulty()\":{\"notice\":\"Getter for prevEpochDiff\"},\"getRelayGenesis()\":{\"notice\":\"Getter for relayGenesis\"},\"getRequest(uint256)\":{\"notice\":\"Retrieve info about a request\"},\"isAncestor(bytes32,bytes32,uint256)\":{\"notice\":\"Checks if a digest is an ancestor of the current one\"},\"markNewHeaviest(bytes32,bytes,bytes,uint256)\":{\"notice\":\"Gives a starting point for the relay\"},\"provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)\":{\"notice\":\"Provide a proof of a tx that satisfies some request\"},\"request(bytes,bytes,uint64,address,uint8,uint256)\":{\"notice\":\"Subscribe to a feed of Bitcoin txns matching a request\"}}}},\"settings\":{\"compilationTarget\":{\"@summa-tx/relay-sol/contracts/OnDemandSPV.sol\":\"OnDemandSPV\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@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/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\"]},\"@summa-tx/relay-sol/contracts/Interfaces.sol\":{\"keccak256\":\"0x6f2698f8aab5cee319f36d69438b6870496a5523e7ccac4b465cdb38661242fa\",\"urls\":[\"bzz-raw://7f854c72db81631d1df800ae0c5fb0a50dc9efd97b0e6593b063c9fb1c61ef9e\",\"dweb:/ipfs/QmUMSQhzYKRSkLTGcHekjqvw1mLpeUULZkfffRdN521NBg\"]},\"@summa-tx/relay-sol/contracts/OnDemandSPV.sol\":{\"keccak256\":\"0x56757b0c8220558cd8c34a8c2679d74b7fe4769c087d6539068608a1ccc1bce2\",\"urls\":[\"bzz-raw://625fee9260c177bcf13bcca7001cec542edb91e9f0150fc5f2943df5a9961877\",\"dweb:/ipfs/QmfJWuP4snnVYnpjHypJgZLxzBW17ZhnfPnzpBtt2yLAUG\"]},\"@summa-tx/relay-sol/contracts/Relay.sol\":{\"keccak256\":\"0x4a6d12fa6570e2c787f9dc234edae9c1eb326e78eb2c6384c84d2b6ba0a0ad7e\",\"urls\":[\"bzz-raw://fa5365dc5a8312d0305568dbf297964be13567a7879395bfc3e99be2510e4e10\",\"dweb:/ipfs/QmfGZz6iL45xPcwQTT3XFAqb7McuY89niBEvfbhy513moF\"]}},\"version\":1}",
  "bytecode": "0x60806040526207a120600b553480156200001857600080fd5b506040516200406e3803806200406e833981810160405260808110156200003e57600080fd5b81019080805160405193929190846401000000008211156200005f57600080fd5b9083019060208201858111156200007557600080fd5b82516401000000008111828201881017156200009057600080fd5b82525081516020918201929091019080838360005b83811015620000bf578181015183820152602001620000a5565b50505050905090810190601f168015620000ed5780820380516001836020036101000a031916815260200191505b506040908152602082015190820151606090920151855191945091925084908490849060501462000157576040805162461bcd60e51b815260206004820152600f60248201526e29ba37b8103132b4b73390323ab6b160891b604482015290519081900360640190fd5b60006200016f846200023560201b62001b1d1760201c565b905062ffffff821615620001b55760405162461bcd60e51b815260040180806020018281038252603d81526020018062004031603d913960400191505060405180910390fd5b600081815560018290556002829055818152600460205260409020839055620001f16107e08406846200036e60201b620029de1790919060201c565b60046000848152602001908152602001600020819055506200021e84620003cc60201b620028f11760201c565b600555505050600991909155506200064d92505050565b6000600280836040518082805190602001908083835b602083106200026c5780518252601f1990920191602091820191016200024b565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015620002ac573d6000803e3d6000fd5b5050506040513d6020811015620002c257600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b60208310620003105780518252601f199092019160209182019101620002ef565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801562000350573d6000803e3d6000fd5b5050506040513d60208110156200036657600080fd5b505192915050565b600082821115620003c6576040805162461bcd60e51b815260206004820152601d60248201527f556e646572666c6f7720647572696e67207375627472616374696f6e2e000000604482015290519081900360640190fd5b50900390565b6000620003f5620003e6836001600160e01b03620003fb16565b6001600160e01b036200047b16565b92915050565b600060606200041d60486003856200049c60201b6200248b179092919060201c565b9050600083604b815181106200042f57fe5b016020015160f81c905060006200046262000453846001600160e01b036200056716565b6001600160e01b03620005f916565b6002199290920160ff166101000a909102949350505050565b6000620003f58261ffff60d01b6200063960201b6200331e1790919060201c565b606081620004ba575060408051602081019091526000815262000560565b8282018381118015620004ce575080855110155b62000520576040805162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e647300000000000000000000000000604482015290519081900360640190fd5b604051915082604083010160405282825283850182038460208701018481015b808210156200055b5781518383015260208201915062000540565b505050505b9392505050565b60608082516040519080825280601f01601f19166020018201604052801562000597576020820181803883390190505b50905060005b8351811015620005f257838181518110620005b457fe5b602001015160f81c60f81b826001838751030381518110620005d257fe5b60200101906001600160f81b031916908160001a9053506001016200059d565b5092915050565b600080805b8351811015620005f2578060010184510360080260020a8482815181106200062257fe5b016020015160f81c029190910190600101620005fe565b60008183816200064557fe5b049392505050565b6139d4806200065d6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806374c3a3a9116100b8578063a882e8641161007c578063a882e8641461058f578063ad401de614610597578063b985621a1461071e578063c58242cd14610747578063c58343ef1461074f578063e3d8d8d8146107c357610137565b806374c3a3a9146102c65780637fa637fc1461038b5780639426323414610499578063a00d95261461057f578063a24022aa1461058757610137565b806330017b3b116100ff57806330017b3b146101765780633015394c1461019957806360b5c390146101ca57806365da41b9146101e757806370d53c18146102a557610137565b8063113764be1461013c5780631910d973146101565780631e96917d1461015e57806329798b96146101665780632b97be241461016e575b600080fd5b6101446107cb565b60408051918252519081900360200190f35b6101446107d1565b6101446107d7565b6101446107dd565b6101446107e3565b6101446004803603604081101561018c57600080fd5b50803590602001356107e9565b6101b6600480360360208110156101af57600080fd5b50356107fe565b604080519115158252519081900360200190f35b610144600480360360208110156101e057600080fd5b503561091c565b6101b6600480360360408110156101fd57600080fd5b810190602081018135600160201b81111561021757600080fd5b82018360208201111561022957600080fd5b803590602001918460018302840111600160201b8311171561024a57600080fd5b919390929091602081019035600160201b81111561026757600080fd5b82018360208201111561027957600080fd5b803590602001918460018302840111600160201b8311171561029a57600080fd5b509092509050610927565b6102ad6109a7565b6040805163ffffffff9092168252519081900360200190f35b6101b6600480360360808110156102dc57600080fd5b81359190810190604081016020820135600160201b8111156102fd57600080fd5b82018360208201111561030f57600080fd5b803590602001918460018302840111600160201b8311171561033057600080fd5b919390929091602081019035600160201b81111561034d57600080fd5b82018360208201111561035f57600080fd5b803590602001918460018302840111600160201b8311171561038057600080fd5b9193509150356109ac565b6101b6600480360360608110156103a157600080fd5b810190602081018135600160201b8111156103bb57600080fd5b8201836020820111156103cd57600080fd5b803590602001918460018302840111600160201b831117156103ee57600080fd5b919390929091602081019035600160201b81111561040b57600080fd5b82018360208201111561041d57600080fd5b803590602001918460018302840111600160201b8311171561043e57600080fd5b919390929091602081019035600160201b81111561045b57600080fd5b82018360208201111561046d57600080fd5b803590602001918460018302840111600160201b8311171561048e57600080fd5b509092509050610a2f565b610144600480360360c08110156104af57600080fd5b810190602081018135600160201b8111156104c957600080fd5b8201836020820111156104db57600080fd5b803590602001918460018302840111600160201b831117156104fc57600080fd5b919390929091602081019035600160201b81111561051957600080fd5b82018360208201111561052b57600080fd5b803590602001918460018302840111600160201b8311171561054c57600080fd5b919350915067ffffffffffffffff813516906001600160a01b036020820135169060ff6040820135169060600135610ad8565b610144610b60565b610144610b67565b610144610b6d565b6101b660048036036101208110156105ae57600080fd5b810190602081018135600160201b8111156105c857600080fd5b8201836020820111156105da57600080fd5b803590602001918460018302840111600160201b831117156105fb57600080fd5b919390929091602081019035600160201b81111561061857600080fd5b82018360208201111561062a57600080fd5b803590602001918460018302840111600160201b8311171561064b57600080fd5b919390926001600160e01b0319833581169360208101359091169260408201359261ffff6060840135169260a081019060800135600160201b81111561069057600080fd5b8201836020820111156106a257600080fd5b803590602001918460018302840111600160201b831117156106c357600080fd5b919390929091602081019035600160201b8111156106e057600080fd5b8201836020820111156106f257600080fd5b803590602001918460018302840111600160201b8311171561071357600080fd5b919350915035610b73565b6101b66004803603606081101561073457600080fd5b5080359060208101359060400135610dad565b610144610dc4565b61076c6004803603602081101561076557600080fd5b5035610dca565b60408051988952602089019790975267ffffffffffffffff9095168787015260ff93841660608801526001600160a01b039283166080880152911660a08601521660c084015260e083015251908190036101000190f35b610144610e56565b60055490565b60015490565b60095481565b600a5481565b60065490565b60006107f58383610e5c565b90505b92915050565b600081815260086020526040812060016004820154600160a01b900460ff16600281111561082857fe5b1461086f576040805162461bcd60e51b815260206004820152601260248201527152657175657374206e6f742061637469766560701b604482015290519081900360640190fd5b60038101546001600160a01b0316331480610896575060048101546001600160a01b031633145b6108d15760405162461bcd60e51b815260040180806020018281038252602a81526020018061389f602a913960400191505060405180910390fd5b60048101805460ff60a01b1916600160a11b17905560405183907f4287938c90f288c18d761d34c3a5ad998017f7e890a72628c9636bb82ea286bd90600090a260019150505b919050565b60006107f882610ed8565b600061099c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8901819004810282018101909252878152925087915086908190840183828082843760009201829052509250610f83915050565b90505b949350505050565b600481565b6000610a248787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525088925061127b915050565b979650505050505050565b6000610a2487878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525050604080516020601f8a01819004810282018101909252888152925088915087908190840183828082843760009201919091525061147892505050565b6000610b5389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a92508991508890508761168b565b9998505050505050505050565b6201518081565b600b5481565b600a5490565b600080610be78b888888888f60405160200180876001600160e01b0319166001600160e01b03191681526004018686808284379190910190508484808284376001600160e01b03199094169190930190815260408051601b19818403018152600490920190529650611b1d95505050505050565b60008181526007602052604090205490915060ff16610ca957610c898f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250869150889050611c4e565b506000818152600760205260409020805460ff19166001179055600a8190555b610d1f8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250899250611db4915050565b50610d97818989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a9250612107915050565b5060019f9e505050505050505050505050505050565b6000610dba8484846123de565b90505b9392505050565b60025490565b600081815260086020526040812080546001820154600383015460048401549294919367ffffffffffffffff600160a01b928390041693839283928392839260ff9104166002811115610e1957fe5b600382015460048301546002909301549a9c999b50979990986001600160a01b03808a169993169750600160e01b90920460ff1695509350915050565b60005490565b600082815b83811015610e92576000918252600360205260409091205490610e8b81600163ffffffff61243316565b9050610e61565b50806107f5576040805162461bcd60e51b815260206004820152601060248201526f2ab735b737bbb71030b731b2b9ba37b960811b604482015290519081900360640190fd5b60008082815b6005811015610f4557600082815260046020526040902054925082610f13576000918252600360205260409091205490610f2d565b610f23838263ffffffff61243316565b9350505050610917565b610f3e81600163ffffffff61243316565b9050610ede565b506040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20626c6f636b60981b604482015290519081900360640190fd5b6000806060600080610f9488611b1d565b90506000610fb2610fad8983605063ffffffff61248b16565b612545565b90506000610fbf83610ed8565b90508780610fd4575081610fd28b612545565b145b61100f5760405162461bcd60e51b815260040180806020018281038252602481526020018061392c6024913960400191505060405180910390fd5b605089518161101a57fe5b06156110575760405162461bcd60e51b815260040180806020018281038252602b81526020018061380f602b913960400191505060405180910390fd5b60005b60508a518161106557fe5b048110156112375761109061108182605063ffffffff61259e16565b8b90605063ffffffff61248b16565b95506110a5826001830163ffffffff61243316565b96506110b086611b1d565b60008181526003602052604090205490955061117557826110f76110f2876040516020018082815260200191505060405160208183030381529060405261260e565b61269b565b111561114a576040805162461bcd60e51b815260206004820152601b60248201527f48656164657220776f726b20697320696e73756666696369656e740000000000604482015290519081900360640190fd5b6000858152600360205260409020849055600487066111755760008581526004602052604090208790555b8261117f87612545565b146111d1576040805162461bcd60e51b815260206004820152601b60248201527f546172676574206368616e67656420756e65787065637465646c790000000000604482015290519081900360640190fd5b6111e1868563ffffffff6126d816565b61121c5760405162461bcd60e51b81526004018080602001828103825260268152602001806137946026913960400191505060405180910390fd5b84935061123081600163ffffffff61243316565b905061105a565b50836112428b611b1d565b6040517ff90e4f1d9cd0dd55e339411cbc9b152482307c3a23ed64715e4a2858f641a3f590600090a35060019998505050505050505050565b60006107e08211156112be5760405162461bcd60e51b81526004018080602001828103825260338152602001806137ba6033913960400191505060405180910390fd5b60006112c984611b1d565b905060006112d686611b1d565b9050600154811461132e576040805162461bcd60e51b815260206004820181905260248201527f50617373656420696e2062657374206973206e6f742062657374206b6e6f776e604482015290519081900360640190fd5b600082815260036020526040902054611384576040805162461bcd60e51b81526020600482015260136024820152722732bb903132b9ba1034b9903ab735b737bbb760691b604482015290519081900360640190fd5b611392876001548487612704565b6113cd5760405162461bcd60e51b81526004018080602001828103825260298152602001806139776029913960400191505060405180910390fd5b816113d98888886127a6565b146114155760405162461bcd60e51b81526004018080602001828103825260338152602001806138c96033913960400191505060405180910390fd5b60018290556002879055600061142a866128f1565b9050600554811461143b5760058190555b8783837f3cc13de64df0f0239626235c51a2da251bbc8c85664ecce39263da3ee03f606c60405160405180910390a4506001979650505050505050565b60008061148c61148786611b1d565b610ed8565b9050600061149c61148786611b1d565b90506107e081066107df146114e25760405162461bcd60e51b815260040180806020018281038252603d815260200180613862603d913960400191505060405180910390fd5b6114f4826107df63ffffffff61243316565b81146115315760405162461bcd60e51b815260040180806020018281038252602881526020018061383a6028913960400191505060405180910390fd5b61153a856128f1565b611543876128f1565b1461157f5760405162461bcd60e51b81526004018080602001828103825260278152602001806139506027913960400191505060405180910390fd5b6060611594856000605063ffffffff61248b16565b905060006115a182612545565b905060006115d46115b18a612545565b6115ba8b612904565b63ffffffff166115c98b612904565b63ffffffff1661291a565b9050818183161461162c576040805162461bcd60e51b815260206004820152601960248201527f496e76616c69642072657461726765742070726f766964656400000000000000604482015290519081900360640190fd5b60006116378a6128f1565b9050806006541415801561166657506116636107e0611657600154610ed8565b9063ffffffff6129de16565b85115b156116715760068190555b61167d89896001610f83565b9a9950505050505050505050565b60098054600181019091558651600091908790602414806116ab57508851155b6116ef576040805162461bcd60e51b815260206004820152601060248201526f4e6f7420612076616c6964205554584f60801b604482015290519081900360640190fd5b805180158015906117175750600181038260008151811061170c57fe5b016020015160f81c14155b1561179d578082604051602001808360ff1660ff1660f81b815260010182805190602001908083835b6020831061175f5780518252601f199092019160209182019101611740565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405291506001810190505b6040516000602080830182815285516060948793602890910191908401908083835b602083106117de5780518252601f1990920191602091820191016117bf565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050816000148061182d5750600061182a82612a3b565b51115b806118415750600061183e82612c6f565b51115b611892576040805162461bcd60e51b815260206004820152601a60248201527f4e6f742061207374616e64617264206f75747075742074797065000000000000604482015290519081900360640190fd5b60008b5111806118a25750600082115b6118ea576040805162461bcd60e51b8152602060048201526014602482015273139bc81c995c5d595cdd081cdc1958da599a595960621b604482015290519081900360640190fd5b60008481526008602052604090206004810180546001600160a01b031916331790558b511561191d578b5160208d012081555b8215611930578351602085012060018201555b67ffffffffffffffff8a16156119695760038101805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8d16021790555b60008860ff1611801561197f575060f18860ff16105b1561199f5760038101805460ff60e01b1916600160e01b60ff8b16021790555b86156119ad57600281018790555b6003810180546001600160a01b0319166001600160a01b038b161790556004810180546001919060ff60a01b1916600160a01b83021790555084336001600160a01b03167ff6744579059b48cd66d2c2dfe223754f166f2200b6de2bc6e0d239cd52d1a8c48c8f88604051808467ffffffffffffffff1667ffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611a70578181015183820152602001611a58565b50505050905090810190601f168015611a9d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611ad0578181015183820152602001611ab8565b50505050905090810190601f168015611afd5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350929a9950505050505050505050565b6000600280836040518082805190602001908083835b60208310611b525780518252601f199092019160209182019101611b33565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015611b91573d6000803e3d6000fd5b5050506040513d6020811015611ba657600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b60208310611bf25780518252601f199092019160209182019101611bd3565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015611c31573d6000803e3d6000fd5b5050506040513d6020811015611c4657600080fd5b505192915050565b6000611c6c83611c65611c6089612ce4565b612cf9565b8787612d15565b611cb3576040805162461bcd60e51b81526020600482015260136024820152722130b21034b731b63ab9b4b7b710383937b7b360691b604482015290519081900360640190fd5b6000611cbe87611b1d565b90506000611cca610dc4565b9050611cd8828260f06123de565b611d29576040805162461bcd60e51b815260206004820152601b60248201527f47434420646f6573206e6f7420636f6e6669726d206865616465720000000000604482015290519081900360640190fd5b600084815260086020526040902060030154600160e01b900460ff1680611d4f84612db9565b60ff161015611da5576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420636f6e6669726d6174696f6e73000000000000604482015290519081900360640190fd5b50600198975050505050505050565b6000611dbf84612dd6565b611e06576040805162461bcd60e51b8152602060048201526013602482015272159a5b881a5cc81b585b199bdc9b585d1d1959606a1b604482015290519081900360640190fd5b611e0f83612e88565b611e57576040805162461bcd60e51b8152602060048201526014602482015273159bdd5d081a5cc81b585b199bdc9b585d1d195960621b604482015290519081900360640190fd5b6000828152600860208190526040909120600281015460ff9288901c83169288169190421015611ece576040805162461bcd60e51b815260206004820152601e60248201527f52657175657374206973207375626d697474656420746f6f206561726c790000604482015290519081900360640190fd5b60016004820154600160a01b900460ff166002811115611eea57fe5b14611f34576040805162461bcd60e51b815260206004820152601560248201527452657175657374206973206e6f742061637469766560581b604482015290519081900360640190fd5b60018101548015801590612065576060611f578960ff871663ffffffff612f2d16565b90506060611f746008808451038461248b9092919063ffffffff16565b905083818051906020012014611fd1576040805162461bcd60e51b815260206004820152601b60248201527f446f6573206e6f74206d61746368207061797320726571756573740000000000604482015290519081900360640190fd5b6003850154600160a01b900467ffffffffffffffff1680158061201057508067ffffffffffffffff16612003846130fd565b67ffffffffffffffff1610155b612061576040805162461bcd60e51b815260206004820152601c60248201527f446f6573206e6f74206d617463682076616c7565207265717565737400000000604482015290519081900360640190fd5b5050505b825480158015906120f55760606120858c60ff8a1663ffffffff61312216565b90508115806120a2575082612099826132c8565b80519060200120145b6120f3576040805162461bcd60e51b815260206004820152601d60248201527f446f6573206e6f74206d61746368207370656e64732072657175657374000000604482015290519081900360640190fd5b505b5060019b9a5050505050505050505050565b60008060086000848152602001908152602001600020905060008160030160009054906101000a90046001600160a01b03169050600060088861ffff16901c905060008860ff169050826001600160a01b0316600b54846001600160a01b0316630140356d905060e01b8c8b8b8b88886040516020018087815260200180602001806020018681526020018560ff1660ff1681526020018460ff1660ff168152602001838103835288818151815260200191508051906020019080838360005b838110156121df5781810151838201526020016121c7565b50505050905090810190601f16801561220c5780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b8381101561223f578181015183820152602001612227565b50505050905090810190601f16801561226c5780820380516001836020036101000a031916815260200191505b509850505050505050505060405160208183030381529060405260405160200180836001600160e01b0319166001600160e01b031916815260040182805190602001908083835b602083106122d25780518252601f1990920191602091820191016122b3565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106123365780518252601f199092019160209182019101612317565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d8060008114612399576040519150601f19603f3d011682016040523d82523d6000602084013e61239e565b606091505b50506040518791508b907f97b6ce150a3b8e94c442fb09fe13c2b262f0e9b3bfc83ef2309675e09dcb453b90600090a35060019998505050505050505050565b600082815b8381101561242757858214156123fe57600192505050610dbd565b600091825260036020526040909120549061242081600163ffffffff61243316565b90506123e3565b50600095945050505050565b818101828110156107f8576040805162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b6060816124a75750604080516020810190915260008152610dbd565b82820183811180156124ba575080855110155b612501576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b604051915082604083010160405282825283850182038460208701018481015b8082101561253a57815183830152602082019150612521565b505050509392505050565b6000606061255c836048600363ffffffff61248b16565b9050600083604b8151811061256d57fe5b016020015160f81c905060006125856110f28461260e565b6002199290920160ff166101000a909102949350505050565b6000826125ad575060006107f8565b50818102818382816125bb57fe5b04146107f8576040805162461bcd60e51b815260206004820152601f60248201527f4f766572666c6f7720647572696e67206d756c7469706c69636174696f6e2e00604482015290519081900360640190fd5b60608082516040519080825280601f01601f19166020018201604052801561263d576020820181803883390190505b50905060005b83518110156126945783818151811061265857fe5b602001015160f81c60f81b82600183875103038151811061267557fe5b60200101906001600160f81b031916908160001a905350600101612643565b5092915050565b600080805b8351811015612694578060010184510360080260020a8482815181106126c257fe5b016020015160f81c0291909101906001016126a0565b6000806126e7611c60856132dd565b90508281146126fa5760009150506107f8565b5060019392505050565b6000838514801561271457508285145b156127215750600161099f565b8383818160005b8681101561277c5789831461274a576000838152600360205260409020549294505b898214612764576000828152600360205260409020549193505b61277581600163ffffffff61243316565b9050612728565b508284141561279257600094505050505061099f565b808214611da557600094505050505061099f565b6000806127b285610ed8565b905060006127c261148786611b1d565b905060006127d261148786611b1d565b90508282101580156127e45750828110155b61281f5760405162461bcd60e51b81526004018080602001828103825260308152602001806138fc6030913960400191505060405180910390fd5b600061283b6107e08506611657866107e063ffffffff61243316565b905080831081831081158261284d5750805b156128685761285b89611b1d565b9650505050505050610dbd565b818015612873575080155b156128815761285b88611b1d565b81801561288b5750805b156128af57838510156128a6576128a188611b1d565b61285b565b61285b89611b1d565b6128cd6128bb896128f1565b6107e0865b069063ffffffff61259e16565b6128e26128d98b6128f1565b6107e0886128c0565b10156128a65761285b88611b1d565b60006107f86128ff83612545565b6132f2565b60006107f86110f261291584613309565b61260e565b60008061292d838563ffffffff6129de16565b905061294362127500600463ffffffff61331e16565b8110156129615761295e62127500600463ffffffff61331e16565b90505b61297562127500600463ffffffff61259e16565b8111156129935761299062127500600463ffffffff61259e16565b90505b60006129b8826129ac886201000063ffffffff61331e16565b9063ffffffff61259e16565b90506129d4620100006129ac836212750063ffffffff61331e16565b9695505050505050565b600082821115612a35576040805162461bcd60e51b815260206004820152601d60248201527f556e646572666c6f7720647572696e67207375627472616374696f6e2e000000604482015290519081900360640190fd5b50900390565b6060600082600881518110612a4c57fe5b0160200151835160f89190911c91506009820160ff1614612a7d575050604080516020810190915260008152610917565b82600981518110612a8a57fe5b016020015160f81c612b2d5760028160ff161015612ab8575050604080516020810190915260008152610917565b600083600a81518110612ac757fe5b016020015160f81c9050600119820160ff1681141580612af4575080602014158015612af4575080601414155b15612b12576040518060200160405280600081525092505050610917565b612b2484600b8363ffffffff61248b16565b92505050610917565b6000612b42846008600363ffffffff61333116565b60408051621976a960e81b81529051908190036003019020909150811415612bed5783600b81518110612b7157fe5b60209101015160f81c6014141580612bbc5750604051808061222b60f21b81525060020190506040518091039020612bb960028651036002876133319092919063ffffffff16565b14155b15612bda576040518060200160405280600081525092505050610917565b612b2484600c601463ffffffff61248b16565b604080516205ea4560ea1b81529051908190036003019020811415612c585783600185510381518110612c1c57fe5b60209101015160f81c608714612c45576040518060200160405280600081525092505050610917565b612b2484600b601463ffffffff61248b16565b505050604080516020810190915260008152919050565b60408051603560f91b8152905160019181900382019020606091612c97908490600990613331565b14612cb15750604080516020810190915260008152610917565b6060612cc683600a600163ffffffff61248b16565b9050610dbd600b612cd68361269b565b85919063ffffffff61248b16565b60606107f8826024602063ffffffff61248b16565b6000815160001415612d0d57506000610917565b506020015190565b60008385148015612d24575081155b8015612d2f57508251155b15612d3c5750600161099f565b60608584866040516020018084815260200183805190602001908083835b60208310612d795780518252601f199092019160209182019101612d5a565b51815160209384036101000a60001901801990921691161790529201938452506040805180850381529390910190525092506129d4915082905084613398565b6000612dc482610ed8565b612dcf600154610ed8565b0392915050565b6000806000612de4846134d7565b9092509050801580612df7575060001982145b15612e0757600092505050610917565b6001820160005b82811015612e7b5785518210612e2b576000945050505050610917565b6060612e4583848951038961248b9092919063ffffffff16565b90506000612e528261355e565b9050600019811415612e6d5760009650505050505050610917565b929092019150600101612e0e565b5084511492505050919050565b6000806000612e96846134d7565b9092509050801580612ea9575060001982145b15612eb957600092505050610917565b6001820160005b82811015612e7b5785518210612edd576000945050505050610917565b6060612ef783848951038961248b9092919063ffffffff16565b90506000612f0482613591565b9050600019811415612f1f5760009650505050505050610917565b929092019150600101612ec0565b6060600080612f3b856134d7565b9092509050600019821415612f815760405162461bcd60e51b81526004018080602001828103825260228152602001806137ed6022913960400191505060405180910390fd5b808410612fc9576040805162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b604482015290519081900360640190fd5b6060600060018401815b8781101561306357612ff382838b51038b61248b9092919063ffffffff16565b9350612ffe84613591565b9250600019831415613057576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b90820190600101612fd3565b5061307c81828a51038a61248b9092919063ffffffff16565b925061308783613591565b91506000198214156130e0576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b6130f188828463ffffffff61248b16565b98975050505050505050565b6000606061310a836135f7565b905060606131178261260e565b905061099f8161269b565b6060600080613130856134d7565b90925090506000198214156131765760405162461bcd60e51b81526004018080602001828103825260228152602001806137ed6022913960400191505060405180910390fd5b8084106131bd576040805162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015290519081900360640190fd5b6060600060018401815b87811015613251576131e782838b51038b61248b9092919063ffffffff16565b93506131f28461355e565b9250600019831415613245576040805162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b604482015290519081900360640190fd5b908201906001016131c7565b5061326a81828a51038a61248b9092919063ffffffff16565b92506132758361355e565b91506000198214156130e0576040805162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b604482015290519081900360640190fd5b60606107f8826000602463ffffffff61248b16565b60606107f8826004602063ffffffff61248b16565b60006107f861ffff60d01b8363ffffffff61331e16565b60606107f8826044600463ffffffff61248b16565b600081838161332957fe5b049392505050565b60008282018381118015613346575080855110155b61338d576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b505091016020012090565b600060208351816133a557fe5b06156133b3575060006107f8565b8251602014156133c5575060016107f8565b8251604014156133d7575060006107f8565b825182906000906133f990611c60908790601f1901602063ffffffff61248b16565b90506000613412611c608783602063ffffffff61248b16565b905060015b865160019061342d90602063ffffffff61331e16565b038110156134cd5760028406600114156134855761347e6134598860208085029063ffffffff61248b16565b836040516020018082815260200191505060405160208183030381529060405261360c565b91506134c1565b6040805160208082018590528251808303820181529183019092526134be916134b9908a908581029063ffffffff61248b16565b61360c565b91505b600193841c9301613417565b5014949350505050565b60008060006134e5846136c7565b905060ff8116613512576000846000815181106134fe57fe5b016020015190935060f81c91506135599050565b8060010160ff16845110156135305750600019915060009050613559565b600061354d6110f261291587600160ff871663ffffffff61248b16565b60ff9092169350909150505b915091565b600080600061356c84613743565b90925090506000198214156135875760001992505050610917565b0160290192915050565b60006009825110156135a65750600019610917565b60606135c16008808551038561248b9092919063ffffffff16565b90506000806135cf836134d7565b90925090506000198214156135eb576000199350505050610917565b01600901915050919050565b60606107f8826000600863ffffffff61248b16565b60006107f583836040516020018083805190602001908083835b602083106136455780518252601f199092019160209182019101613626565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061368d5780518252601f19909201916020918201910161366e565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052611b1d565b6000816000815181106136d657fe5b60209101015160f81c60ff14156136ef57506008610917565b816000815181106136fc57fe5b60209101015160f81c60fe141561371557506004610917565b8160008151811061372257fe5b60209101015160f81c60fd141561373b57506002610917565b506000919050565b60008060258351101561375d575060001990506000613559565b60606137786024808651038661248b9092919063ffffffff16565b9050600080613786836134d7565b909550935050505091509156fe4865616465727320646f206e6f7420666f726d206120636f6e73697374656e7420636861696e526571756573746564206c696d69742069732067726561746572207468616e203120646966666963756c747920706572696f6452656164206f76657272756e20647572696e6720566172496e742070617273696e67486561646572206172726179206c656e677468206d75737420626520646976697369626c652062792038304d7573742070726f766964652065786163746c79203120646966666963756c747920706572696f644d7573742070726f7669646520746865206c61737420686561646572206f662074686520636c6f73696e6720646966666963756c747920706572696f6443616e206f6e6c792062652063616e63656c6c6564206279206f776e6572206f7220636f6e73756d65724e65772062657374206861736820646f6573206e6f742068617665206d6f726520776f726b207468616e2070726576696f7573412064657363656e64616e74206865696768742069732062656c6f772074686520616e636573746f7220686569676874556e6578706563746564207265746172676574206f6e2065787465726e616c2063616c6c506572696f642068656164657220646966666963756c7469657320646f206e6f74206d61746368416e636573746f72206d75737420626520686561766965737420636f6d6d6f6e20616e636573746f72a265627a7a72315820c78cd984b4a44ee489763380a641f336841352de68a0b4527809553841e4bd1964736f6c63430005110032506572696f64207374617274206861736820646f6573206e6f74206861766520776f726b2e2048696e743a2077726f6e672062797465206f726465723f",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806374c3a3a9116100b8578063a882e8641161007c578063a882e8641461058f578063ad401de614610597578063b985621a1461071e578063c58242cd14610747578063c58343ef1461074f578063e3d8d8d8146107c357610137565b806374c3a3a9146102c65780637fa637fc1461038b5780639426323414610499578063a00d95261461057f578063a24022aa1461058757610137565b806330017b3b116100ff57806330017b3b146101765780633015394c1461019957806360b5c390146101ca57806365da41b9146101e757806370d53c18146102a557610137565b8063113764be1461013c5780631910d973146101565780631e96917d1461015e57806329798b96146101665780632b97be241461016e575b600080fd5b6101446107cb565b60408051918252519081900360200190f35b6101446107d1565b6101446107d7565b6101446107dd565b6101446107e3565b6101446004803603604081101561018c57600080fd5b50803590602001356107e9565b6101b6600480360360208110156101af57600080fd5b50356107fe565b604080519115158252519081900360200190f35b610144600480360360208110156101e057600080fd5b503561091c565b6101b6600480360360408110156101fd57600080fd5b810190602081018135600160201b81111561021757600080fd5b82018360208201111561022957600080fd5b803590602001918460018302840111600160201b8311171561024a57600080fd5b919390929091602081019035600160201b81111561026757600080fd5b82018360208201111561027957600080fd5b803590602001918460018302840111600160201b8311171561029a57600080fd5b509092509050610927565b6102ad6109a7565b6040805163ffffffff9092168252519081900360200190f35b6101b6600480360360808110156102dc57600080fd5b81359190810190604081016020820135600160201b8111156102fd57600080fd5b82018360208201111561030f57600080fd5b803590602001918460018302840111600160201b8311171561033057600080fd5b919390929091602081019035600160201b81111561034d57600080fd5b82018360208201111561035f57600080fd5b803590602001918460018302840111600160201b8311171561038057600080fd5b9193509150356109ac565b6101b6600480360360608110156103a157600080fd5b810190602081018135600160201b8111156103bb57600080fd5b8201836020820111156103cd57600080fd5b803590602001918460018302840111600160201b831117156103ee57600080fd5b919390929091602081019035600160201b81111561040b57600080fd5b82018360208201111561041d57600080fd5b803590602001918460018302840111600160201b8311171561043e57600080fd5b919390929091602081019035600160201b81111561045b57600080fd5b82018360208201111561046d57600080fd5b803590602001918460018302840111600160201b8311171561048e57600080fd5b509092509050610a2f565b610144600480360360c08110156104af57600080fd5b810190602081018135600160201b8111156104c957600080fd5b8201836020820111156104db57600080fd5b803590602001918460018302840111600160201b831117156104fc57600080fd5b919390929091602081019035600160201b81111561051957600080fd5b82018360208201111561052b57600080fd5b803590602001918460018302840111600160201b8311171561054c57600080fd5b919350915067ffffffffffffffff813516906001600160a01b036020820135169060ff6040820135169060600135610ad8565b610144610b60565b610144610b67565b610144610b6d565b6101b660048036036101208110156105ae57600080fd5b810190602081018135600160201b8111156105c857600080fd5b8201836020820111156105da57600080fd5b803590602001918460018302840111600160201b831117156105fb57600080fd5b919390929091602081019035600160201b81111561061857600080fd5b82018360208201111561062a57600080fd5b803590602001918460018302840111600160201b8311171561064b57600080fd5b919390926001600160e01b0319833581169360208101359091169260408201359261ffff6060840135169260a081019060800135600160201b81111561069057600080fd5b8201836020820111156106a257600080fd5b803590602001918460018302840111600160201b831117156106c357600080fd5b919390929091602081019035600160201b8111156106e057600080fd5b8201836020820111156106f257600080fd5b803590602001918460018302840111600160201b8311171561071357600080fd5b919350915035610b73565b6101b66004803603606081101561073457600080fd5b5080359060208101359060400135610dad565b610144610dc4565b61076c6004803603602081101561076557600080fd5b5035610dca565b60408051988952602089019790975267ffffffffffffffff9095168787015260ff93841660608801526001600160a01b039283166080880152911660a08601521660c084015260e083015251908190036101000190f35b610144610e56565b60055490565b60015490565b60095481565b600a5481565b60065490565b60006107f58383610e5c565b90505b92915050565b600081815260086020526040812060016004820154600160a01b900460ff16600281111561082857fe5b1461086f576040805162461bcd60e51b815260206004820152601260248201527152657175657374206e6f742061637469766560701b604482015290519081900360640190fd5b60038101546001600160a01b0316331480610896575060048101546001600160a01b031633145b6108d15760405162461bcd60e51b815260040180806020018281038252602a81526020018061389f602a913960400191505060405180910390fd5b60048101805460ff60a01b1916600160a11b17905560405183907f4287938c90f288c18d761d34c3a5ad998017f7e890a72628c9636bb82ea286bd90600090a260019150505b919050565b60006107f882610ed8565b600061099c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8901819004810282018101909252878152925087915086908190840183828082843760009201829052509250610f83915050565b90505b949350505050565b600481565b6000610a248787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525088925061127b915050565b979650505050505050565b6000610a2487878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525050604080516020601f8a01819004810282018101909252888152925088915087908190840183828082843760009201919091525061147892505050565b6000610b5389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a92508991508890508761168b565b9998505050505050505050565b6201518081565b600b5481565b600a5490565b600080610be78b888888888f60405160200180876001600160e01b0319166001600160e01b03191681526004018686808284379190910190508484808284376001600160e01b03199094169190930190815260408051601b19818403018152600490920190529650611b1d95505050505050565b60008181526007602052604090205490915060ff16610ca957610c898f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250869150889050611c4e565b506000818152600760205260409020805460ff19166001179055600a8190555b610d1f8888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250899250611db4915050565b50610d97818989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a9250612107915050565b5060019f9e505050505050505050505050505050565b6000610dba8484846123de565b90505b9392505050565b60025490565b600081815260086020526040812080546001820154600383015460048401549294919367ffffffffffffffff600160a01b928390041693839283928392839260ff9104166002811115610e1957fe5b600382015460048301546002909301549a9c999b50979990986001600160a01b03808a169993169750600160e01b90920460ff1695509350915050565b60005490565b600082815b83811015610e92576000918252600360205260409091205490610e8b81600163ffffffff61243316565b9050610e61565b50806107f5576040805162461bcd60e51b815260206004820152601060248201526f2ab735b737bbb71030b731b2b9ba37b960811b604482015290519081900360640190fd5b60008082815b6005811015610f4557600082815260046020526040902054925082610f13576000918252600360205260409091205490610f2d565b610f23838263ffffffff61243316565b9350505050610917565b610f3e81600163ffffffff61243316565b9050610ede565b506040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20626c6f636b60981b604482015290519081900360640190fd5b6000806060600080610f9488611b1d565b90506000610fb2610fad8983605063ffffffff61248b16565b612545565b90506000610fbf83610ed8565b90508780610fd4575081610fd28b612545565b145b61100f5760405162461bcd60e51b815260040180806020018281038252602481526020018061392c6024913960400191505060405180910390fd5b605089518161101a57fe5b06156110575760405162461bcd60e51b815260040180806020018281038252602b81526020018061380f602b913960400191505060405180910390fd5b60005b60508a518161106557fe5b048110156112375761109061108182605063ffffffff61259e16565b8b90605063ffffffff61248b16565b95506110a5826001830163ffffffff61243316565b96506110b086611b1d565b60008181526003602052604090205490955061117557826110f76110f2876040516020018082815260200191505060405160208183030381529060405261260e565b61269b565b111561114a576040805162461bcd60e51b815260206004820152601b60248201527f48656164657220776f726b20697320696e73756666696369656e740000000000604482015290519081900360640190fd5b6000858152600360205260409020849055600487066111755760008581526004602052604090208790555b8261117f87612545565b146111d1576040805162461bcd60e51b815260206004820152601b60248201527f546172676574206368616e67656420756e65787065637465646c790000000000604482015290519081900360640190fd5b6111e1868563ffffffff6126d816565b61121c5760405162461bcd60e51b81526004018080602001828103825260268152602001806137946026913960400191505060405180910390fd5b84935061123081600163ffffffff61243316565b905061105a565b50836112428b611b1d565b6040517ff90e4f1d9cd0dd55e339411cbc9b152482307c3a23ed64715e4a2858f641a3f590600090a35060019998505050505050505050565b60006107e08211156112be5760405162461bcd60e51b81526004018080602001828103825260338152602001806137ba6033913960400191505060405180910390fd5b60006112c984611b1d565b905060006112d686611b1d565b9050600154811461132e576040805162461bcd60e51b815260206004820181905260248201527f50617373656420696e2062657374206973206e6f742062657374206b6e6f776e604482015290519081900360640190fd5b600082815260036020526040902054611384576040805162461bcd60e51b81526020600482015260136024820152722732bb903132b9ba1034b9903ab735b737bbb760691b604482015290519081900360640190fd5b611392876001548487612704565b6113cd5760405162461bcd60e51b81526004018080602001828103825260298152602001806139776029913960400191505060405180910390fd5b816113d98888886127a6565b146114155760405162461bcd60e51b81526004018080602001828103825260338152602001806138c96033913960400191505060405180910390fd5b60018290556002879055600061142a866128f1565b9050600554811461143b5760058190555b8783837f3cc13de64df0f0239626235c51a2da251bbc8c85664ecce39263da3ee03f606c60405160405180910390a4506001979650505050505050565b60008061148c61148786611b1d565b610ed8565b9050600061149c61148786611b1d565b90506107e081066107df146114e25760405162461bcd60e51b815260040180806020018281038252603d815260200180613862603d913960400191505060405180910390fd5b6114f4826107df63ffffffff61243316565b81146115315760405162461bcd60e51b815260040180806020018281038252602881526020018061383a6028913960400191505060405180910390fd5b61153a856128f1565b611543876128f1565b1461157f5760405162461bcd60e51b81526004018080602001828103825260278152602001806139506027913960400191505060405180910390fd5b6060611594856000605063ffffffff61248b16565b905060006115a182612545565b905060006115d46115b18a612545565b6115ba8b612904565b63ffffffff166115c98b612904565b63ffffffff1661291a565b9050818183161461162c576040805162461bcd60e51b815260206004820152601960248201527f496e76616c69642072657461726765742070726f766964656400000000000000604482015290519081900360640190fd5b60006116378a6128f1565b9050806006541415801561166657506116636107e0611657600154610ed8565b9063ffffffff6129de16565b85115b156116715760068190555b61167d89896001610f83565b9a9950505050505050505050565b60098054600181019091558651600091908790602414806116ab57508851155b6116ef576040805162461bcd60e51b815260206004820152601060248201526f4e6f7420612076616c6964205554584f60801b604482015290519081900360640190fd5b805180158015906117175750600181038260008151811061170c57fe5b016020015160f81c14155b1561179d578082604051602001808360ff1660ff1660f81b815260010182805190602001908083835b6020831061175f5780518252601f199092019160209182019101611740565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405291506001810190505b6040516000602080830182815285516060948793602890910191908401908083835b602083106117de5780518252601f1990920191602091820191016117bf565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050816000148061182d5750600061182a82612a3b565b51115b806118415750600061183e82612c6f565b51115b611892576040805162461bcd60e51b815260206004820152601a60248201527f4e6f742061207374616e64617264206f75747075742074797065000000000000604482015290519081900360640190fd5b60008b5111806118a25750600082115b6118ea576040805162461bcd60e51b8152602060048201526014602482015273139bc81c995c5d595cdd081cdc1958da599a595960621b604482015290519081900360640190fd5b60008481526008602052604090206004810180546001600160a01b031916331790558b511561191d578b5160208d012081555b8215611930578351602085012060018201555b67ffffffffffffffff8a16156119695760038101805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8d16021790555b60008860ff1611801561197f575060f18860ff16105b1561199f5760038101805460ff60e01b1916600160e01b60ff8b16021790555b86156119ad57600281018790555b6003810180546001600160a01b0319166001600160a01b038b161790556004810180546001919060ff60a01b1916600160a01b83021790555084336001600160a01b03167ff6744579059b48cd66d2c2dfe223754f166f2200b6de2bc6e0d239cd52d1a8c48c8f88604051808467ffffffffffffffff1667ffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015611a70578181015183820152602001611a58565b50505050905090810190601f168015611a9d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611ad0578181015183820152602001611ab8565b50505050905090810190601f168015611afd5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350929a9950505050505050505050565b6000600280836040518082805190602001908083835b60208310611b525780518252601f199092019160209182019101611b33565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015611b91573d6000803e3d6000fd5b5050506040513d6020811015611ba657600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b60208310611bf25780518252601f199092019160209182019101611bd3565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015611c31573d6000803e3d6000fd5b5050506040513d6020811015611c4657600080fd5b505192915050565b6000611c6c83611c65611c6089612ce4565b612cf9565b8787612d15565b611cb3576040805162461bcd60e51b81526020600482015260136024820152722130b21034b731b63ab9b4b7b710383937b7b360691b604482015290519081900360640190fd5b6000611cbe87611b1d565b90506000611cca610dc4565b9050611cd8828260f06123de565b611d29576040805162461bcd60e51b815260206004820152601b60248201527f47434420646f6573206e6f7420636f6e6669726d206865616465720000000000604482015290519081900360640190fd5b600084815260086020526040902060030154600160e01b900460ff1680611d4f84612db9565b60ff161015611da5576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420636f6e6669726d6174696f6e73000000000000604482015290519081900360640190fd5b50600198975050505050505050565b6000611dbf84612dd6565b611e06576040805162461bcd60e51b8152602060048201526013602482015272159a5b881a5cc81b585b199bdc9b585d1d1959606a1b604482015290519081900360640190fd5b611e0f83612e88565b611e57576040805162461bcd60e51b8152602060048201526014602482015273159bdd5d081a5cc81b585b199bdc9b585d1d195960621b604482015290519081900360640190fd5b6000828152600860208190526040909120600281015460ff9288901c83169288169190421015611ece576040805162461bcd60e51b815260206004820152601e60248201527f52657175657374206973207375626d697474656420746f6f206561726c790000604482015290519081900360640190fd5b60016004820154600160a01b900460ff166002811115611eea57fe5b14611f34576040805162461bcd60e51b815260206004820152601560248201527452657175657374206973206e6f742061637469766560581b604482015290519081900360640190fd5b60018101548015801590612065576060611f578960ff871663ffffffff612f2d16565b90506060611f746008808451038461248b9092919063ffffffff16565b905083818051906020012014611fd1576040805162461bcd60e51b815260206004820152601b60248201527f446f6573206e6f74206d61746368207061797320726571756573740000000000604482015290519081900360640190fd5b6003850154600160a01b900467ffffffffffffffff1680158061201057508067ffffffffffffffff16612003846130fd565b67ffffffffffffffff1610155b612061576040805162461bcd60e51b815260206004820152601c60248201527f446f6573206e6f74206d617463682076616c7565207265717565737400000000604482015290519081900360640190fd5b5050505b825480158015906120f55760606120858c60ff8a1663ffffffff61312216565b90508115806120a2575082612099826132c8565b80519060200120145b6120f3576040805162461bcd60e51b815260206004820152601d60248201527f446f6573206e6f74206d61746368207370656e64732072657175657374000000604482015290519081900360640190fd5b505b5060019b9a5050505050505050505050565b60008060086000848152602001908152602001600020905060008160030160009054906101000a90046001600160a01b03169050600060088861ffff16901c905060008860ff169050826001600160a01b0316600b54846001600160a01b0316630140356d905060e01b8c8b8b8b88886040516020018087815260200180602001806020018681526020018560ff1660ff1681526020018460ff1660ff168152602001838103835288818151815260200191508051906020019080838360005b838110156121df5781810151838201526020016121c7565b50505050905090810190601f16801561220c5780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b8381101561223f578181015183820152602001612227565b50505050905090810190601f16801561226c5780820380516001836020036101000a031916815260200191505b509850505050505050505060405160208183030381529060405260405160200180836001600160e01b0319166001600160e01b031916815260040182805190602001908083835b602083106122d25780518252601f1990920191602091820191016122b3565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106123365780518252601f199092019160209182019101612317565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d8060008114612399576040519150601f19603f3d011682016040523d82523d6000602084013e61239e565b606091505b50506040518791508b907f97b6ce150a3b8e94c442fb09fe13c2b262f0e9b3bfc83ef2309675e09dcb453b90600090a35060019998505050505050505050565b600082815b8381101561242757858214156123fe57600192505050610dbd565b600091825260036020526040909120549061242081600163ffffffff61243316565b90506123e3565b50600095945050505050565b818101828110156107f8576040805162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b6060816124a75750604080516020810190915260008152610dbd565b82820183811180156124ba575080855110155b612501576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b604051915082604083010160405282825283850182038460208701018481015b8082101561253a57815183830152602082019150612521565b505050509392505050565b6000606061255c836048600363ffffffff61248b16565b9050600083604b8151811061256d57fe5b016020015160f81c905060006125856110f28461260e565b6002199290920160ff166101000a909102949350505050565b6000826125ad575060006107f8565b50818102818382816125bb57fe5b04146107f8576040805162461bcd60e51b815260206004820152601f60248201527f4f766572666c6f7720647572696e67206d756c7469706c69636174696f6e2e00604482015290519081900360640190fd5b60608082516040519080825280601f01601f19166020018201604052801561263d576020820181803883390190505b50905060005b83518110156126945783818151811061265857fe5b602001015160f81c60f81b82600183875103038151811061267557fe5b60200101906001600160f81b031916908160001a905350600101612643565b5092915050565b600080805b8351811015612694578060010184510360080260020a8482815181106126c257fe5b016020015160f81c0291909101906001016126a0565b6000806126e7611c60856132dd565b90508281146126fa5760009150506107f8565b5060019392505050565b6000838514801561271457508285145b156127215750600161099f565b8383818160005b8681101561277c5789831461274a576000838152600360205260409020549294505b898214612764576000828152600360205260409020549193505b61277581600163ffffffff61243316565b9050612728565b508284141561279257600094505050505061099f565b808214611da557600094505050505061099f565b6000806127b285610ed8565b905060006127c261148786611b1d565b905060006127d261148786611b1d565b90508282101580156127e45750828110155b61281f5760405162461bcd60e51b81526004018080602001828103825260308152602001806138fc6030913960400191505060405180910390fd5b600061283b6107e08506611657866107e063ffffffff61243316565b905080831081831081158261284d5750805b156128685761285b89611b1d565b9650505050505050610dbd565b818015612873575080155b156128815761285b88611b1d565b81801561288b5750805b156128af57838510156128a6576128a188611b1d565b61285b565b61285b89611b1d565b6128cd6128bb896128f1565b6107e0865b069063ffffffff61259e16565b6128e26128d98b6128f1565b6107e0886128c0565b10156128a65761285b88611b1d565b60006107f86128ff83612545565b6132f2565b60006107f86110f261291584613309565b61260e565b60008061292d838563ffffffff6129de16565b905061294362127500600463ffffffff61331e16565b8110156129615761295e62127500600463ffffffff61331e16565b90505b61297562127500600463ffffffff61259e16565b8111156129935761299062127500600463ffffffff61259e16565b90505b60006129b8826129ac886201000063ffffffff61331e16565b9063ffffffff61259e16565b90506129d4620100006129ac836212750063ffffffff61331e16565b9695505050505050565b600082821115612a35576040805162461bcd60e51b815260206004820152601d60248201527f556e646572666c6f7720647572696e67207375627472616374696f6e2e000000604482015290519081900360640190fd5b50900390565b6060600082600881518110612a4c57fe5b0160200151835160f89190911c91506009820160ff1614612a7d575050604080516020810190915260008152610917565b82600981518110612a8a57fe5b016020015160f81c612b2d5760028160ff161015612ab8575050604080516020810190915260008152610917565b600083600a81518110612ac757fe5b016020015160f81c9050600119820160ff1681141580612af4575080602014158015612af4575080601414155b15612b12576040518060200160405280600081525092505050610917565b612b2484600b8363ffffffff61248b16565b92505050610917565b6000612b42846008600363ffffffff61333116565b60408051621976a960e81b81529051908190036003019020909150811415612bed5783600b81518110612b7157fe5b60209101015160f81c6014141580612bbc5750604051808061222b60f21b81525060020190506040518091039020612bb960028651036002876133319092919063ffffffff16565b14155b15612bda576040518060200160405280600081525092505050610917565b612b2484600c601463ffffffff61248b16565b604080516205ea4560ea1b81529051908190036003019020811415612c585783600185510381518110612c1c57fe5b60209101015160f81c608714612c45576040518060200160405280600081525092505050610917565b612b2484600b601463ffffffff61248b16565b505050604080516020810190915260008152919050565b60408051603560f91b8152905160019181900382019020606091612c97908490600990613331565b14612cb15750604080516020810190915260008152610917565b6060612cc683600a600163ffffffff61248b16565b9050610dbd600b612cd68361269b565b85919063ffffffff61248b16565b60606107f8826024602063ffffffff61248b16565b6000815160001415612d0d57506000610917565b506020015190565b60008385148015612d24575081155b8015612d2f57508251155b15612d3c5750600161099f565b60608584866040516020018084815260200183805190602001908083835b60208310612d795780518252601f199092019160209182019101612d5a565b51815160209384036101000a60001901801990921691161790529201938452506040805180850381529390910190525092506129d4915082905084613398565b6000612dc482610ed8565b612dcf600154610ed8565b0392915050565b6000806000612de4846134d7565b9092509050801580612df7575060001982145b15612e0757600092505050610917565b6001820160005b82811015612e7b5785518210612e2b576000945050505050610917565b6060612e4583848951038961248b9092919063ffffffff16565b90506000612e528261355e565b9050600019811415612e6d5760009650505050505050610917565b929092019150600101612e0e565b5084511492505050919050565b6000806000612e96846134d7565b9092509050801580612ea9575060001982145b15612eb957600092505050610917565b6001820160005b82811015612e7b5785518210612edd576000945050505050610917565b6060612ef783848951038961248b9092919063ffffffff16565b90506000612f0482613591565b9050600019811415612f1f5760009650505050505050610917565b929092019150600101612ec0565b6060600080612f3b856134d7565b9092509050600019821415612f815760405162461bcd60e51b81526004018080602001828103825260228152602001806137ed6022913960400191505060405180910390fd5b808410612fc9576040805162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b604482015290519081900360640190fd5b6060600060018401815b8781101561306357612ff382838b51038b61248b9092919063ffffffff16565b9350612ffe84613591565b9250600019831415613057576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b90820190600101612fd3565b5061307c81828a51038a61248b9092919063ffffffff16565b925061308783613591565b91506000198214156130e0576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b6130f188828463ffffffff61248b16565b98975050505050505050565b6000606061310a836135f7565b905060606131178261260e565b905061099f8161269b565b6060600080613130856134d7565b90925090506000198214156131765760405162461bcd60e51b81526004018080602001828103825260228152602001806137ed6022913960400191505060405180910390fd5b8084106131bd576040805162461bcd60e51b815260206004820152601060248201526f2b34b7103932b0b21037bb32b9393ab760811b604482015290519081900360640190fd5b6060600060018401815b87811015613251576131e782838b51038b61248b9092919063ffffffff16565b93506131f28461355e565b9250600019831415613245576040805162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b604482015290519081900360640190fd5b908201906001016131c7565b5061326a81828a51038a61248b9092919063ffffffff16565b92506132758361355e565b91506000198214156130e0576040805162461bcd60e51b815260206004820152601760248201527642616420566172496e7420696e2073637269707453696760481b604482015290519081900360640190fd5b60606107f8826000602463ffffffff61248b16565b60606107f8826004602063ffffffff61248b16565b60006107f861ffff60d01b8363ffffffff61331e16565b60606107f8826044600463ffffffff61248b16565b600081838161332957fe5b049392505050565b60008282018381118015613346575080855110155b61338d576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b505091016020012090565b600060208351816133a557fe5b06156133b3575060006107f8565b8251602014156133c5575060016107f8565b8251604014156133d7575060006107f8565b825182906000906133f990611c60908790601f1901602063ffffffff61248b16565b90506000613412611c608783602063ffffffff61248b16565b905060015b865160019061342d90602063ffffffff61331e16565b038110156134cd5760028406600114156134855761347e6134598860208085029063ffffffff61248b16565b836040516020018082815260200191505060405160208183030381529060405261360c565b91506134c1565b6040805160208082018590528251808303820181529183019092526134be916134b9908a908581029063ffffffff61248b16565b61360c565b91505b600193841c9301613417565b5014949350505050565b60008060006134e5846136c7565b905060ff8116613512576000846000815181106134fe57fe5b016020015190935060f81c91506135599050565b8060010160ff16845110156135305750600019915060009050613559565b600061354d6110f261291587600160ff871663ffffffff61248b16565b60ff9092169350909150505b915091565b600080600061356c84613743565b90925090506000198214156135875760001992505050610917565b0160290192915050565b60006009825110156135a65750600019610917565b60606135c16008808551038561248b9092919063ffffffff16565b90506000806135cf836134d7565b90925090506000198214156135eb576000199350505050610917565b01600901915050919050565b60606107f8826000600863ffffffff61248b16565b60006107f583836040516020018083805190602001908083835b602083106136455780518252601f199092019160209182019101613626565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061368d5780518252601f19909201916020918201910161366e565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052611b1d565b6000816000815181106136d657fe5b60209101015160f81c60ff14156136ef57506008610917565b816000815181106136fc57fe5b60209101015160f81c60fe141561371557506004610917565b8160008151811061372257fe5b60209101015160f81c60fd141561373b57506002610917565b506000919050565b60008060258351101561375d575060001990506000613559565b60606137786024808651038661248b9092919063ffffffff16565b9050600080613786836134d7565b909550935050505091509156fe4865616465727320646f206e6f7420666f726d206120636f6e73697374656e7420636861696e526571756573746564206c696d69742069732067726561746572207468616e203120646966666963756c747920706572696f6452656164206f76657272756e20647572696e6720566172496e742070617273696e67486561646572206172726179206c656e677468206d75737420626520646976697369626c652062792038304d7573742070726f766964652065786163746c79203120646966666963756c747920706572696f644d7573742070726f7669646520746865206c61737420686561646572206f662074686520636c6f73696e6720646966666963756c747920706572696f6443616e206f6e6c792062652063616e63656c6c6564206279206f776e6572206f7220636f6e73756d65724e65772062657374206861736820646f6573206e6f742068617665206d6f726520776f726b207468616e2070726576696f7573412064657363656e64616e74206865696768742069732062656c6f772074686520616e636573746f7220686569676874556e6578706563746564207265746172676574206f6e2065787465726e616c2063616c6c506572696f642068656164657220646966666963756c7469657320646f206e6f74206d61746368416e636573746f72206d75737420626520686561766965737420636f6d6d6f6e20616e636573746f72a265627a7a72315820c78cd984b4a44ee489763380a641f336841352de68a0b4527809553841e4bd1964736f6c63430005110032",
  "sourceMap": "504:14016:54:-;;;1256:6;1220:42;;1668:252;8:9:-1;5:2;;;30:1;27;20:12;5:2;1668:252:54;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1668:252:54;;;;;;;;;;;;;19:11:-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;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;1668:252:54;;420:4:-1;411:14;;;;1668:252:54;;;;;411:14:-1;1668:252:54;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;1668:252:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1668:252:54;;;;;;;;;;;;;;;;;1533:21:55;;1668:252:54;;-1:-1:-1;1668:252:54;;-1:-1:-1;1819:14:54;;1668:252;;;;1558:2:55;1533:27;1525:55;;;;;-1:-1:-1;;;1525:55:55;;;;;;;;;;;;-1:-1:-1;;;1525:55:55;;;;;;;;;;;;;;;1590:22;1615:24;:14;:22;;;;;:24;;:::i;:::-;1590:49;-1:-1:-1;1694:66:55;1671:90;;:104;1650:203;;;;-1:-1:-1;;;1650:203:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1864:12;:29;;;1903:15;:32;;;1945:23;:40;;;1995:27;;;:11;:27;;;;;:37;;;2070:27;2092:4;2025:7;2082:14;2070:7;:11;;;;;;:27;;;;:::i;:::-;2042:11;:25;2054:12;2042:25;;;;;;;;;;;:55;;;;2127:34;:14;:32;;;;;:34;;:::i;:::-;2108:16;:53;-1:-1:-1;;;1896:6:54;:17;;;;-1:-1:-1;504:14016:54;;-1:-1:-1;;;504:14016:54;5703:126:48;5760:7;5786:36;5810:10;5817:2;5810:10;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5810:10:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5810:10:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5810:10:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5810:10:48;5793:28;;;5810:10;5793:28;;;;;;;;;26:21:-1;;;22:32;;6:49;;5793:28:48;;;;;;;5786:36;;5793:28;;;;5786:36;;;;;5793:28;5786:36;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5786:36:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5786:36:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5786:36:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5786:36:48;;5703:126;-1:-1:-1;;5703:126:48:o;2288:160:51:-;2348:7;2381:2;2375;:8;;2367:50;;;;;-1:-1:-1;;;2367:50:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2434:7:51;;;2288:160::o;24914:148:48:-;24986:7;25012:43;25032:22;25046:7;-1:-1:-1;;;;;25032:13:48;:22;:::i;:::-;-1:-1:-1;;;;;25012:19:48;:43;:::i;:::-;25005:50;24914:148;-1:-1:-1;;24914:148:48:o;22696:316::-;22764:7;22783:15;22801:20;22815:2;22819:1;22801:7;:13;;;;;;:20;;;;;:::i;:::-;22783:38;;22831:8;22848:7;22856:2;22848:11;;;;;;;;;;;;;;;-1:-1:-1;22870:17:48;22890:34;22902:21;22920:2;-1:-1:-1;;;;;22902:17:48;:21;:::i;:::-;-1:-1:-1;;;;;22890:11:48;:34;:::i;:::-;-1:-1:-1;;22951:6:48;;;;22934:23;;22988:3;:16;22975:30;;;;22696:316;-1:-1:-1;;;;22696:316:48:o;23392:178::-;23461:7;23538:25;23555:7;-1:-1:-1;;;23538:16:48;;;;;;:25;;;;:::i;10345:924:49:-;10432:16;10464:12;10460:55;;-1:-1:-1;10492:12:49;;;;;;;;;-1:-1:-1;10492:12:49;;;;10460:55;10536:16;;;10570:13;;;:38;;;;;10604:4;10587:6;:13;:21;;10570:38;10562:70;;;;;-1:-1:-1;;;10562:70:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;10769:4;10763:11;10756:18;;10818:7;10813:2;10808:3;10804:12;10800:26;10794:4;10787:40;10852:7;10847:3;10840:20;10979:6;10971;10967:19;10962:3;10958:29;11055:6;11050:2;11042:6;11038:15;11034:28;11099:7;11094:3;11090:17;11001:252;11130:3;11125;11122:12;11001:252;;;11234:3;11228:10;11221:4;11216:3;11212:14;11205:34;11169:2;11164:3;11160:12;11153:19;;11001:252;;;11005:116;;10652:611;;;;;;;;:::o;2548:278:48:-;2615:12;2639:22;2674:2;:9;2664:20;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;2664:20:48;87:34:-1;135:17;;-1:-1;2664:20:48;-1:-1:-1;2639:45:48;-1:-1:-1;2700:6:48;2695:98;2716:2;:9;2712:1;:13;2695:98;;;2777:2;2780:1;2777:5;;;;;;;;;;;;;;;;2746:9;2772:1;2768;2756:2;:9;:13;:17;2746:28;;;;;;;;;;;:36;-1:-1:-1;;;;;2746:36:48;;;;;;;;-1:-1:-1;2727:3:48;;2695:98;;;-1:-1:-1;2810:9:48;2548:278;-1:-1:-1;;2548:278:48:o;4382:268::-;4443:7;;;4488:131;4509:2;:9;4505:1;:13;4488:131;;;4599:1;4603;4599:5;4586:2;:9;:19;4581:1;:25;4575:1;:32;4565:2;4568:1;4565:5;;;;;;;;;;;;;;4559:49;4549:59;;;;;4520:3;;4488:131;;1865:301:51;1925:7;2157:2;2152;:7;;;;;;;1865:301;-1:-1:-1;;;1865:301:51:o;504:14016:54:-;;;;;;;",
  "deployedSourceMap": "504:14016:54:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;504:14016:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2357:109:55;;;:::i;:::-;;;;;;;;;;;;;;;;3185:99;;;:::i;1155:21:54:-;;;:::i;1182:32::-;;;:::i;2646:103:55:-;;;:::i;4223:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4223:143:55;;;;;;;:::i;2209:431:54:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2209:431:54;;:::i;:::-;;;;;;;;;;;;;;;;;;3851:113:55;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3851:113:55;;:::i;5378:154::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5378:154:55;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5378:154:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5378:154:55;;;;;;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;5378:154:55;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5378:154:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5378:154:55;;;;;;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;-1:-1;5378:154:55;;-1:-1:-1;5378:154:55;-1:-1:-1;5378:154:55;:::i;704:42::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6967:259;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6967:259:55;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6967:259:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6967:259:55;;;;;;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;6967:259:55;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6967:259:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6967:259:55;;;;;;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;6967:259:55;;-1:-1:-1;6967:259:55;-1:-1:-1;6967:259:55;;:::i;6088:286::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6088:286:55;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6088:286:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6088:286:55;;;;;;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;6088:286:55;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6088:286:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6088:286:55;;;;;;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;6088:286:55;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6088:286:55;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6088:286:55;;;;;;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;-1:-1;6088:286:55;;-1:-1:-1;6088:286:55;-1:-1:-1;6088:286:55;:::i;4365:313:54:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4365:313:54;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4365:313:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4365:313:54;;;;;;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;4365:313:54;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4365:313:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4365:313:54;;;;;;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;4365:313:54;;-1:-1:-1;4365:313:54;-1:-1:-1;4365:313:54;;;;;-1:-1:-1;;;;;4365:313:54;;;;;;;;;;;;;;;;;:::i;1090:48::-;;;:::i;1220:42::-;;;:::i;2646:105::-;;;:::i;8293:973::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;8293:973:54;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8293:973:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8293:973:54;;;;;;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;8293:973:54;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8293:973:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8293:973:54;;;;;;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;8293:973:54;;;;-1:-1:-1;;;;;;8293:973:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8293:973:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8293:973:54;;;;;;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;8293:973:54;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8293:973:54;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8293:973:54;;;;;;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;8293:973:54;;-1:-1:-1;8293:973:54;-1:-1:-1;8293:973:54;;:::i;4821:172:55:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4821:172:55;;;;;;;;;;;;:::i;3478:115::-;;;:::i;3003:600:54:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3003:600:54;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3003:600:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2916:93:55;;;:::i;2357:109::-;2443:16;;2357:109;:::o;3185:99::-;3262:15;;3185:99;:::o;1155:21:54:-;;;;:::o;1182:32::-;;;;:::o;2646:103:55:-;2729:13;;2646:103;:::o;4223:143::-;4302:7;4328:31;4342:7;4351;4328:13;:31::i;:::-;4321:38;;4223:143;;;;;:::o;2209:431:54:-;2270:4;2314:20;;;:8;:20;;;;;2366;2352:10;;;;-1:-1:-1;;;2352:10:54;;;;:34;;;;;;;;;2344:65;;;;;-1:-1:-1;;;2344:65:54;;;;;;;;;;;;-1:-1:-1;;;2344:65:54;;;;;;;;;;;;;;;2441:13;;;;-1:-1:-1;;;;;2441:13:54;2427:10;:27;;:55;;-1:-1:-1;2472:10:54;;;;-1:-1:-1;;;;;2472:10:54;2458;:24;2427:55;2419:110;;;;-1:-1:-1;;;2419:110:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2539:10;;;:33;;-1:-1:-1;;;;2539:33:54;-1:-1:-1;;;2539:33:54;;;2587:25;;2601:10;;2587:25;;-1:-1:-1;;2587:25:54;2629:4;2622:11;;;2209:431;;;;:::o;3851:113:55:-;3911:7;3937:20;3949:7;3937:11;:20::i;5378:154::-;5465:4;5488:37;5500:7;;5488:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;5488:37:55;;;;137:4:-1;5488:37:55;;;;;;;;;;;;;;;;;;-1:-1:-1;5509:8:55;;-1:-1:-1;5509:8:55;;;;5488:37;;5509:8;;;;5488:37;1:33:-1;99:1;81:16;;74:27;;;-1:-1;99:1;-1:-1;5488:11:55;;-1:-1:-1;;5488:37:55:i;:::-;5481:44;;5378:154;;;;;;;:::o;704:42::-;745:1;704:42;:::o;6967:259::-;7137:4;7160:59;7177:9;7188:12;;7160:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;7160:59:55;;;;137:4:-1;7160:59:55;;;;;;;;;;;;;;;;;;-1:-1:-1;7202:8:55;;-1:-1:-1;7202:8:55;;;;7160:59;;7202:8;;;;7160:59;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;7212:6:55;;-1:-1:-1;7160:16:55;;-1:-1:-1;;7160:59:55:i;:::-;7153:66;6967:259;-1:-1:-1;;;;;;;6967:259:55:o;6088:286::-;6267:4;6290:77;6314:21;;6290:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;6290:77:55;;;;137:4:-1;6290:77:55;;;;;;;;;;;;;;;;;;-1:-1:-1;6337:19:55;;-1:-1:-1;6337:19:55;;;;6290:77;;6337:19;;;;6290:77;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;6290:77:55;;;;137:4:-1;6290:77:55;;;;;;;;;;;;;;;;;;-1:-1:-1;6358:8:55;;-1:-1:-1;6358:8:55;;;;6290:77;;6358:8;;;;6290:77;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;6290:23:55;;-1:-1:-1;;;6290:77:55:i;4365:313:54:-;4575:7;4601:70;4610:7;;4601:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;4601:70:54;;;;137:4:-1;4601:70:54;;;;;;;;;;;;;;;;;;-1:-1:-1;4619:5:54;;-1:-1:-1;4619:5:54;;;;4601:70;;4619:5;;;;4601:70;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;4626:10:54;;-1:-1:-1;4638:9:54;;-1:-1:-1;4649:9:54;;-1:-1:-1;4660:10:54;4601:8;:70::i;:::-;4594:77;4365:313;-1:-1:-1;;;;;;;;;4365:313:54:o;1090:48::-;1126:12;1090:48;:::o;1220:42::-;;;;:::o;2646:105::-;2727:17;;2646:105;:::o;8293:973::-;8592:4;8608:13;8624:60;8641:8;8651:4;;8657:5;;8664:9;8624:50;;;;;;-1:-1:-1;;;;;8624:50:54;;-1:-1:-1;;;;;8624:50:54;;;;;;;;30:3:-1;22:6;14;1:33;45:16;;;;;-1:-1;8624:50:54;;;;45:16:-1;1:33;-1:-1;;;;;;8624:50:54;;;45:16:-1;;;;8624:50:54;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;8624:50:54;;;;;;;-1:-1:-1;8624:58:54;;-1:-1:-1;;;;;;8624:60:54:i;:::-;8842:20;;;;:13;:20;;;;;;8608:76;;-1:-1:-1;8842:20:54;;8837:272;;8878:140;8911:7;;8878:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8878:140:54;;;;;;8936:6;;8878:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;8960:6:54;;-1:-1:-1;8984:5:54;;-1:-1:-1;9007:10:54;;-1:-1:-1;8878:15:54;:140::i;:::-;-1:-1:-1;9032:20:54;;;;:13;:20;;;;;:27;;-1:-1:-1;;9032:27:54;9055:4;9032:27;;;9073:17;:25;;;8837:272;9118:52;9133:11;9146:4;;9118:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;9118:52:54;;;;137:4:-1;9118:52:54;;;;;;;;;;;;;;;;;;-1:-1:-1;9152:5:54;;-1:-1:-1;9152:5:54;;;;9118:52;;9152:5;;;;9118:52;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;9159:10:54;;-1:-1:-1;9118:14:54;;-1:-1:-1;;9118:52:54:i;:::-;;9180:58;9194:5;9201:11;9214:4;;9180:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;9180:58:54;;;;137:4:-1;9180:58:54;;;;;;;;;;;;;;;;;;-1:-1:-1;9220:5:54;;-1:-1:-1;9220:5:54;;;;9180:58;;9220:5;;;;9180:58;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;9227:10:54;;-1:-1:-1;9180:13:54;;-1:-1:-1;;9180:58:54:i;:::-;-1:-1:-1;9255:4:54;;8293:973;-1:-1:-1;;;;;;;;;;;;;;;8293:973:54:o;4821:172:55:-;4920:4;4943:43;4955:9;4966:11;4979:6;4943:11;:43::i;:::-;4936:50;;4821:172;;;;;;:::o;3478:115::-;3563:23;;3478:115;:::o;3003:600:54:-;3089:14;3317:20;;;:8;:20;;;;;3356:11;;3384:9;;;;3415:14;;;;3453:10;;;;3356:11;;3384:9;;3415:14;-1:-1:-1;;;3415:14:54;;;;;;3089;;;;;;;;3453:10;;;;3447:17;;;;;;;;3485:13;;;;3516:10;;;;3582:14;;;;;3003:600;;;;-1:-1:-1;3003:600:54;;3439:25;;-1:-1:-1;;;;;3485:13:54;;;;3516:10;;;-1:-1:-1;;;;3547:13:54;;;;;;-1:-1:-1;3582:14:54;-1:-1:-1;3003:600:54;-1:-1:-1;;3003:600:54:o;2916:93:55:-;2964:7;2990:12;2916:93;:::o;13510:333::-;13590:7;13628;13590;13645:106;13669:7;13665:1;:11;13645:106;;;13717:23;;;;:13;:23;;;;;;;;13682:8;:1;13688;13682:8;:5;:8;:::i;:::-;13678:12;;13645:106;;;-1:-1:-1;13768:22:55;13760:51;;;;;-1:-1:-1;;;13760:51:55;;;;;;;;;;;;-1:-1:-1;;;13760:51:55;;;;;;;;;;;;;;12794:457;12855:7;;12922;12855;12939:273;12963:19;12959:23;;12939:273;;;13022:21;;;;:11;:21;;;;;;;-1:-1:-1;13061:12:55;13057:145;;13104:23;;;;:13;:23;;;;;;;;13057:145;;;13173:14;:7;13185:1;13173:14;:11;:14;:::i;:::-;13166:21;;;;;;;13057:145;12988:8;:1;12994;12988:8;:5;:8;:::i;:::-;12984:12;;12939:273;;;-1:-1:-1;13221:23:55;;;-1:-1:-1;;;13221:23:55;;;;;;;;;;;;-1:-1:-1;;;13221:23:55;;;;;;;;;;;;;;7724:2282;7824:4;7840:15;7865:20;7895:22;7927:23;7953:17;:7;:15;:17::i;:::-;7927:43;-1:-1:-1;7981:15:55;7999:37;:21;:8;7981:15;8017:2;7999:21;:14;:21;:::i;:::-;:35;:37::i;:::-;7981:55;;8046:21;8070:28;8082:15;8070:11;:28::i;:::-;8046:52;;8159:9;:47;;;;8199:7;8172:23;:7;:21;:23::i;:::-;:34;8159:47;8138:121;;;;-1:-1:-1;;;8138:121:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8295:2;8277:8;:15;:20;;;;;;:25;8269:81;;;;-1:-1:-1;;;8269:81:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8605:9;8600:1294;8642:2;8624:8;:15;:20;;;;;;8620:1;:24;8600:1294;;;8684:29;8699:9;:1;8705:2;8699:9;:5;:9;:::i;:::-;8684:8;;8710:2;8684:29;:14;:29;:::i;:::-;8674:39;-1:-1:-1;8737:24:55;:13;8759:1;8755:5;;8737:24;:17;:24;:::i;:::-;8727:34;;8792:17;:7;:15;:17::i;:::-;9051:1;9010:29;;;:13;:29;;;;;;8775:34;;-1:-1:-1;9006:560:55;;9172:7;9102:66;:52;9119:14;9102:32;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9102:32:55;;;:50;:52::i;:::-;:64;:66::i;:::-;:77;;9073:158;;;;;-1:-1:-1;;;9073:158:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;9249:29;;;;:13;:29;;;;;:47;;;745:1;9318:7;:25;9314:238;;9496:27;;;;:11;:27;;;;;:37;;;9314:238;9685:7;9658:23;:7;:21;:23::i;:::-;:34;9650:74;;;;;-1:-1:-1;;;9650:74:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;9746:47;:7;9777:15;9746:47;:30;:47;:::i;:::-;9738:98;;;;-1:-1:-1;;;9738:98:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9869:14;;-1:-1:-1;8650:8:55;:1;8656;8650:8;:5;:8;:::i;:::-;8646:12;;8600:1294;;;;9963:14;9932:17;:7;:15;:17::i;:::-;9909:69;;;;;;;-1:-1:-1;9995:4:55;;7724:2282;-1:-1:-1;;;;;;;;;7724:2282:55:o;15224:1287::-;15391:4;15425;15415:6;:14;;15407:78;;;;-1:-1:-1;;;15407:78:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15495:22;15520:18;:8;:16;:18::i;:::-;15495:43;;15548:26;15577:22;:12;:20;:22::i;:::-;15548:51;;15639:15;;15617:18;:37;15609:82;;;;;-1:-1:-1;;;15609:82:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15763:1;15722:29;;;:13;:29;;;;;;15701:100;;;;;-1:-1:-1;;;15701:100:55;;;;;;;;;;;;-1:-1:-1;;;15701:100:55;;;;;;;;;;;;;;;15832:73;15854:9;15865:15;;15882:14;15898:6;15832:21;:73::i;:::-;15811:152;;;;-1:-1:-1;;;15811:152:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16054:14;15994:56;16016:9;16027:12;16041:8;15994:21;:56::i;:::-;:74;15973:163;;;;-1:-1:-1;;;15973:163:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16147:15;:32;;;16189:23;:35;;;-1:-1:-1;16254:28:55;:8;:26;:28::i;:::-;16235:47;;16308:16;;16296:8;:28;16292:86;;16340:16;:27;;;16292:86;16473:9;16445:14;16413:18;16393:90;;;;;;;;;;-1:-1:-1;16500:4:55;;15224:1287;-1:-1:-1;;;;;;;15224:1287:55:o;10562:1995::-;10736:4;10806:20;10829:44;10841:31;:21;:29;:31::i;:::-;10829:11;:44::i;:::-;10806:67;;10883:18;10904:42;10916:29;:19;:27;:29::i;10904:42::-;10883:63;-1:-1:-1;11057:4:55;10883:63;11044:17;11065:4;11044:25;11023:124;;;;-1:-1:-1;;;11023:124:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11192:22;:12;11209:4;11192:22;:16;:22;:::i;:::-;11178:10;:36;11157:114;;;;-1:-1:-1;;;11157:114:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11347:39;:19;:37;:39::i;:::-;11302:41;:21;:39;:41::i;:::-;:84;11281:161;;;;-1:-1:-1;;;11281:161:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11547:28;11578:21;:8;11593:1;11596:2;11578:21;:14;:21;:::i;:::-;11547:52;;11609:21;11633:31;:15;:29;:31::i;:::-;11609:55;;11674:23;11700:193;11740:37;:21;:35;:37::i;:::-;11791:40;:21;:38;:40::i;:::-;11700:193;;11845:38;:19;:36;:38::i;:::-;11700:193;;:26;:193::i;:::-;11674:219;;11961:13;11941:15;11925:13;:31;11924:50;11903:113;;;;;-1:-1:-1;;;11903:113:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;12226:16;12245:41;:21;:39;:41::i;:::-;12226:60;;12317:8;12300:13;;:25;;:80;;;;;12342:38;12375:4;12342:28;12354:15;;12342:11;:28::i;:::-;:32;:38;:32;:38;:::i;:::-;12329:10;:51;12300:80;12296:135;;;12396:13;:24;;;12296:135;12502:48;12514:19;12535:8;12545:4;12502:11;:48::i;:::-;12495:55;10562:1995;-1:-1:-1;;;;;;;;;;10562:1995:55:o;5439:1913:54:-;5686:6;;;5720:1;5711:10;;5702:19;;;5775:14;;5646:7;;5686:6;5751:5;;5793:2;5775:20;;:43;;-1:-1:-1;5799:14:54;;:19;5775:43;5767:72;;;;;-1:-1:-1;;;5767:72:54;;;;;;;;;;;;-1:-1:-1;;;5767:72:54;;;;;;;;;;;;;;;5952:11;;6035:12;;;;;:46;;;6080:1;6069:8;:12;6057:4;6062:1;6057:7;;;;;;;;;;;;;;6051:30;;6035:46;6031:197;;;6127:8;6138:4;6104:39;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6104:39:54;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6104:39:54;;;6097:46;;6169:1;6157:13;;;;6031:197;6256:33;;6280:1;6256:33;;;;;;;;;6238:15;;6284:4;;6256:33;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6256:33:54;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6256:33:54;;;6238:51;;6320:8;6332:1;6320:13;:74;;;;6393:1;6367:16;:2;:14;:16::i;:::-;:23;:27;6320:74;:147;;;;6466:1;6432:24;:2;:22;:24::i;:::-;:31;:35;6320:147;6299:231;;;;;-1:-1:-1;;;6299:231:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;6566:1;6549:7;:14;:18;:34;;;;6582:1;6571:8;:12;6549:34;6541:67;;;;;-1:-1:-1;;;6541:67:54;;;;;;;;;;;;-1:-1:-1;;;6541:67:54;;;;;;;;;;;;;;;6619:25;6647:20;;;:8;:20;;;;;6677:10;;;:23;;-1:-1:-1;;;;;;6677:23:54;6690:10;6677:23;;;6715:14;;:18;6711:81;;6763:18;;;;;;6749:32;;6711:81;6805:12;;6801:70;;6845:15;;;;;;6833:9;;;:27;6801:70;6884:14;;;;6880:72;;6914:14;;;:27;;-1:-1:-1;;;;6914:27:54;-1:-1:-1;;;6914:27:54;;;;;;;6880:72;6977:1;6965:9;:13;;;:32;;;;;6994:3;6982:9;:15;;;6965:32;6961:116;;;7041:13;;;:25;;-1:-1:-1;;;;7041:25:54;-1:-1:-1;;;7041:25:54;;;;;;;6961:116;7090:14;;7086:72;;7120:14;;;:27;;;7086:72;7167:13;;;:25;;-1:-1:-1;;;;;;7167:25:54;-1:-1:-1;;;;;7167:25:54;;;;;7202:10;;;:33;;-1:-1:-1;;7202:10:54;-1:-1:-1;;;;7202:33:54;-1:-1:-1;;;;7202:33:54;;;;;7279:10;7267;-1:-1:-1;;;;;7251:66:54;;7291:10;7303:7;7312:4;7251:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;7251:66:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7251:66:54;;;;;;;;;;;;;;;;;;;;;;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;7251:66:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7335:10:54;;5439:1913;-1:-1:-1;;;;;;;;;;5439:1913:54:o;5703:126:48:-;5760:7;5786:36;5810:10;5817:2;5810:10;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5810:10:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5810:10:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5810:10:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5810:10:48;5793:28;;;5810:10;5793:28;;;;;;;;;26:21:-1;;;22:32;;6:49;;5793:28:48;;;;;;;5786:36;;5793:28;;;;5786:36;;;;;5793:28;5786:36;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5786:36:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5786:36:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5786:36:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5786:36:48;;5703:126;-1:-1:-1;;5703:126:48:o;11166:867:54:-;11354:4;11391:148;11426:5;11449:41;:29;:7;:27;:29::i;:::-;:39;:41::i;:::-;11508:6;11532;11391:17;:148::i;:::-;11370:205;;;;;-1:-1:-1;;;11370:205:54;;;;;;;;;;;;-1:-1:-1;;;11370:205:54;;;;;;;;;;;;;;;11586:19;11608:17;:7;:15;:17::i;:::-;11586:39;;11635:12;11650:28;:26;:28::i;:::-;11635:43;;11710:84;11739:11;11768:4;11790:3;11710:11;:84::i;:::-;11689:149;;;;;-1:-1:-1;;;11689:149:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;11848:15;11866:20;;;:8;:20;;;;;:29;;;-1:-1:-1;;;11866:29:54;;;;;11926:22;11936:11;11926:9;:22::i;:::-;:35;;;;11905:99;;;;;-1:-1:-1;;;11905:99:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12022:4:54;;11166:867;-1:-1:-1;;;;;;;;11166:867:54:o;12905:1613::-;13070:4;13094:18;:4;:16;:18::i;:::-;13086:50;;;;;-1:-1:-1;;;13086:50:54;;;;;;;;;;;;-1:-1:-1;;;13086:50:54;;;;;;;;;;;;;;;13154:20;:5;:18;:20::i;:::-;13146:53;;;;;-1:-1:-1;;;13146:53:54;;;;;;;;;;;;-1:-1:-1;;;13146:53:54;;;;;;;;;;;;;;;13210:17;13348:20;;;13251:1;13348:20;;;;;;;;13386:14;;;;13236:16;;;;;;;;13290:18;;;13348:20;13404:15;-1:-1:-1;13386:33:54;13378:76;;;;;-1:-1:-1;;;13378:76:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;13486:20;13472:10;;;;-1:-1:-1;;;13472:10:54;;;;:34;;;;;;;;;13464:68;;;;;-1:-1:-1;;;13464:68:54;;;;;;;;;;;;-1:-1:-1;;;13464:68:54;;;;;;;;;;;;;;;13559:9;;;;13594:19;;;;;13623:503;;13651:17;13671:47;:5;:47;;;;:26;:47;:::i;:::-;13651:67;;13732:26;13761:30;13772:1;13789;13775:4;:11;:15;13761:4;:10;;:30;;;;;:::i;:::-;13732:59;;13858:5;13840:13;13830:24;;;;;;:33;13805:106;;;;;-1:-1:-1;;;13805:106:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;13945:14;;;;-1:-1:-1;;;13945:14:54;;;;13998:15;;;:68;;;14056:10;14033:33;;:19;:4;:17;:19::i;:::-;:33;;;;13998:68;13973:142;;;;;-1:-1:-1;;;13973:142:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;13623:503;;;;14154:11;;14193:21;;;;;14224:267;;14254:16;14273:44;:4;:44;;;;:24;:44;:::i;:::-;14254:63;;14357:10;14356:11;:74;;;;14423:7;14397:21;:3;:19;:21::i;:::-;14387:32;;;;;;:43;14356:74;14331:149;;;;;-1:-1:-1;;;14331:149:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;14224:267;;-1:-1:-1;14507:4:54;;12905:1613;-1:-1:-1;;;;;;;;;;;12905:1613:54:o;9697:892::-;9878:4;9894:25;9922:8;:20;9931:10;9922:20;;;;;;;;;;;9894:48;;9952:14;9982:4;:13;;;;;;;;;;-1:-1:-1;;;;;9982:13:54;9952:44;;10007:17;10048:1;10033:11;:16;;;;10007:43;;10060:18;10087:11;10101:4;10087:18;10060:46;;10308:1;-1:-1:-1;;;;;10300:15:54;10320:18;;10387:1;-1:-1:-1;;;;;10387:5:54;;:14;;;;10430:5;10437:4;10443:5;10450:10;10462:11;10475:12;10419:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;10419:69:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10419:69:54;;;;;;;;;;;;;;;;;;;;;;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;10419:69:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10419:69:54;;;10353:149;;;;;;-1:-1:-1;;;;;10353:149:54;;-1:-1:-1;;;;;10353:149:54;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10353:149:54;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10353:149:54;;;10300:212;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10300:212:54;;;;;;;;;;;;;;;;;;;;;;;;;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;-1:-1;;10528:32:54;;10549:10;;-1:-1:-1;10542:5:54;;10528:32;;;;;-1:-1:-1;10578:4:54;;9697:892;-1:-1:-1;;;;;;;;;9697:892:54:o;14298:438:55:-;14398:4;14433:11;14398:4;14519:189;14543:6;14539:1;:10;14519:189;;;14595:9;14583:8;:21;14579:71;;;14631:4;14624:11;;;;;;14579:71;14674:23;;;;:13;:23;;;;;;;;14555:8;:1;14561;14555:8;:5;:8;:::i;:::-;14551:12;;14519:189;;;-1:-1:-1;14724:5:55;;14298:438;-1:-1:-1;;;;;14298:438:55:o;2520:172:51:-;2605:7;;;2630;;;;2622:45;;;;;-1:-1:-1;;;2622:45:51;;;;;;;;;;;;;;;;;;;;;;;;;;;10345:924:49;10432:16;10464:12;10460:55;;-1:-1:-1;10492:12:49;;;;;;;;;-1:-1:-1;10492:12:49;;;;10460:55;10536:16;;;10570:13;;;:38;;;;;10604:4;10587:6;:13;:21;;10570:38;10562:70;;;;;-1:-1:-1;;;10562:70:49;;;;;;;;;;;;-1:-1:-1;;;10562:70:49;;;;;;;;;;;;;;;10769:4;10763:11;10756:18;;10818:7;10813:2;10808:3;10804:12;10800:26;10794:4;10787:40;10852:7;10847:3;10840:20;10979:6;10971;10967:19;10962:3;10958:29;11055:6;11050:2;11042:6;11038:15;11034:28;11099:7;11094:3;11090:17;11001:252;11130:3;11125;11122:12;11001:252;;;11234:3;11228:10;11221:4;11216:3;11212:14;11205:34;11169:2;11164:3;11160:12;11153:19;;11001:252;;;11005:116;;10652:611;;;;;;;:::o;22696:316:48:-;22764:7;22783:15;22801:20;:7;22815:2;22819:1;22801:20;:13;:20;:::i;:::-;22783:38;;22831:8;22848:7;22856:2;22848:11;;;;;;;;;;;;;;;-1:-1:-1;22870:17:48;22890:34;22902:21;22920:2;22902:17;:21::i;22890:34::-;-1:-1:-1;;22951:6:48;;;;22934:23;;22988:3;:16;22975:30;;;;22696:316;-1:-1:-1;;;;22696:316:48:o;1317:456:51:-;1377:9;1619:7;1615:46;;-1:-1:-1;1649:1:51;1642:8;;1615:46;-1:-1:-1;1675:7:51;;;1680:2;1675;:7;:2;1700:6;;;;;:12;1692:56;;;;;-1:-1:-1;;;1692:56:51;;;;;;;;;;;;;;;;;;;;;;;;;;;2548:278:48;2615:12;2639:22;2674:2;:9;2664:20;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;2664:20:48;87:34:-1;135:17;;-1:-1;2664:20:48;-1:-1:-1;2639:45:48;-1:-1:-1;2700:6:48;2695:98;2716:2;:9;2712:1;:13;2695:98;;;2777:2;2780:1;2777:5;;;;;;;;;;;;;;;;2746:9;2772:1;2768;2756:2;:9;:13;:17;2746:28;;;;;;;;;;;:36;-1:-1:-1;;;;;2746:36:48;;;;;;;;-1:-1:-1;2727:3:48;;2695:98;;;-1:-1:-1;2810:9:48;2548:278;-1:-1:-1;;2548:278:48:o;4382:268::-;4443:7;;;4488:131;4509:2;:9;4505:1;:13;4488:131;;;4599:1;4603;4599:5;4586:2;:9;:19;4581:1;:25;4575:1;:32;4565:2;4568:1;4565:5;;;;;;;;;;;;;;4559:49;4549:59;;;;;4520:3;;4488:131;;5322:391:52;5426:4;5489:17;5509:40;:28;:7;:26;:28::i;:40::-;5489:60;;5651:17;5638:9;:30;5634:51;;5678:5;5671:12;;;;;5634:51;-1:-1:-1;5702:4:52;;5322:391;-1:-1:-1;;;5322:391:52:o;16998:1082:55:-;17156:4;17220:5;17207:9;:18;:41;;;;;17242:6;17229:9;:19;17207:41;17203:83;;;-1:-1:-1;17271:4:55;17264:11;;17203:83;17319:5;17358:6;17319:5;17358:6;17296:20;17447:413;17470:6;17466:1;:10;17447:413;;;17523:9;17510;:22;17506:163;;17616:24;;;;:13;:24;;;;;;17567:9;;-1:-1:-1;17506:163:55;17700:9;17686:10;:23;17682:168;;17796:25;;;;:13;:25;;;;;;17745:10;;-1:-1:-1;17682:168:55;17482:8;:1;17488;17482:8;:5;:8;:::i;:::-;17478:12;;17447:413;;;;17889:13;17873:12;:29;17869:50;;;17912:5;17905:12;;;;;;;;17869:50;17994:10;17981:9;:23;17977:44;;18014:5;18007:12;;;;;;;;18483:1768;18627:7;18646:23;18672:22;18684:9;18672:11;:22::i;:::-;18646:48;;18704:19;18726:28;18738:15;:5;:13;:15::i;18726:28::-;18704:50;;18764:20;18787:29;18799:16;:6;:14;:16::i;18787:29::-;18764:52;;18863:15;18848:11;:30;;:65;;;;;18898:15;18882:12;:31;;18848:65;18827:151;;;;-1:-1:-1;;;18827:151:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19086:30;19119:53;19167:4;19149:15;:22;19119:25;:15;19139:4;19119:25;:19;:25;:::i;:53::-;19086:86;-1:-1:-1;19203:36:55;;;19271:37;;;19648:14;;19203:36;19648:32;;;19666:14;19648:32;19644:63;;;19690:15;:5;:13;:15::i;:::-;19683:22;;;;;;;;;;19644:63;19720:13;:32;;;;;19738:14;19737:15;19720:32;19716:64;;;19762:16;:6;:14;:16::i;19716:64::-;19793:13;:31;;;;;19810:14;19793:31;19789:456;;;19862:12;19847:11;:27;;:64;;19895:16;:6;:14;:16::i;:::-;19847:64;;;19877:15;:5;:13;:15::i;19789:456::-;20063:53;20089:26;:6;:24;:26::i;:::-;20079:4;20064:12;:19;;;20063:53;:25;:53;:::i;:::-;19992:51;20017:25;:5;:23;:25::i;:::-;20007:4;19993:11;:18;;19992:51;19991:125;19987:248;;;20143:16;:6;:14;:16::i;24914:148:48:-;24986:7;25012:43;25032:22;25046:7;25032:13;:22::i;:::-;25012:19;:43::i;24520:170::-;24591:6;24623:59;24635:46;24653:27;24672:7;24653:18;:27::i;:::-;24635:17;:46::i;27555:920::-;27711:7;;27753:37;:16;27774:15;27753:37;:20;:37;:::i;:::-;27730:60;-1:-1:-1;27889:22:48;486:20;27909:1;27889:22;:19;:22;:::i;:::-;27874:12;:37;27870:105;;;27942:22;486:20;27962:1;27942:22;:19;:22;:::i;:::-;27927:37;;27870:105;28003:22;486:20;28023:1;28003:22;:19;:22;:::i;:::-;27988:12;:37;27984:105;;;28056:22;486:20;28076:1;28056:22;:19;:22;:::i;:::-;28041:37;;27984:105;28346:17;28366:44;28397:12;28366:26;:15;28386:5;28366:26;:19;:26;:::i;:::-;:30;:44;:30;:44;:::i;:::-;28346:64;-1:-1:-1;28427:41:48;28462:5;28427:30;28346:64;486:20;28427:30;:13;:30;:::i;:41::-;28420:48;27555:920;-1:-1:-1;;;;;;27555:920:48:o;2288:160:51:-;2348:7;2381:2;2375;:8;;2367:50;;;;;-1:-1:-1;;;2367:50:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2434:7:51;;;2288:160::o;17257:1974:48:-;17323:12;17347:16;17372:7;17380:1;17372:10;;;;;;;;;;;;17649:14;;17372:10;;;;;;-1:-1:-1;17644:1:48;17631:14;;17366:17;17631:32;;17627:75;;-1:-1:-1;;17679:12:48;;;;;;;;;-1:-1:-1;17679:12:48;;;;17627:75;17722:7;17730:1;17722:10;;;;;;;;;;;;;;17712:1413;;17771:1;17758:10;:14;;;17754:65;;;-1:-1:-1;;17792:12:48;;;;;;;;;-1:-1:-1;17792:12:48;;;;17754:65;17832:19;17860:7;17868:2;17860:11;;;;;;;;;;;;;;;-1:-1:-1;;;18048:14:48;;17854:18;18033:29;;;;;:77;;;18067:11;18082:4;18067:19;;:42;;;;;18090:11;18105:4;18090:19;;18067:42;18029:128;;;18130:12;;;;;;;;;;;;;;;;;;18029:128;18177:30;:7;18191:2;18195:11;18177:30;:13;:30;:::i;:::-;18170:37;;;;;;17712:1413;18238:12;18253:28;:7;18276:1;18279;18253:28;:22;:28;:::i;:::-;18328:22;;;-1:-1:-1;;;18328:22:48;;;;;;;;;;;;18238:43;;-1:-1:-1;18320:30:48;;18316:799;;;18514:7;18522:2;18514:11;;;;;;;;;;;;;;;18530:4;18508:26;;;:119;;;18607:20;;;;-1:-1:-1;;;18607:20:48;;;;;;;;;;;;;;18558:45;18598:1;18581:7;:14;:18;18601:1;18558:7;:22;;:45;;;;;:::i;:::-;:69;;18508:119;18504:178;;;18651:12;;;;;;;;;;;;;;;;;;18504:178;18706:21;:7;18720:2;18724;18706:21;:13;:21;:::i;18316:799::-;18779:22;;;-1:-1:-1;;;18779:22:48;;;;;;;;;;;;18771:30;;18767:348;;;18964:7;18989:1;18972:7;:14;:18;18964:27;;;;;;;;;;;;;;;18996:4;18958:42;18954:101;;19024:12;;;;;;;;;;;;;;;;;;18954:101;19079:21;:7;19093:2;19097;19079:21;:13;:21;:::i;18767:348::-;17712:1413;-1:-1:-1;;19134:12:48;;;;;;;;;-1:-1:-1;19134:12:48;;17257:1974;;;:::o;16674:308::-;16808:18;;;-1:-1:-1;;;16808:18:48;;;;;;;;;;;;;16748:12;;16776:28;;:7;;16799:1;;16776:22;:28::i;:::-;:50;16772:93;;-1:-1:-1;16842:12:48;;;;;;;;;-1:-1:-1;16842:12:48;;;;16772:93;16874:21;16898:20;:7;16912:2;16916:1;16898:20;:13;:20;:::i;:::-;16874:44;;16935:40;16949:2;16953:21;16965:8;16953:11;:21::i;:::-;16935:7;;:40;;:13;:40;:::i;22309:133::-;22383:12;22414:21;:7;22428:2;22432;22414:21;:13;:21;:::i;16172:232:49:-;16236:14;16266:7;:14;16284:1;16266:19;16262:60;;;-1:-1:-1;16308:3:49;16301:10;;16262:60;-1:-1:-1;16384:2:49;16371:16;16365:23;;16341:57::o;1686:527:52:-;1844:4;1914:11;1905:5;:20;:35;;;;-1:-1:-1;1929:11:52;;1905:35;:69;;;;-1:-1:-1;1944:25:52;;:30;1905:69;1901:111;;;-1:-1:-1;1997:4:52;1990:11;;1901:111;2022:19;2061:5;2068:18;2088:11;2044:56;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;2044:56:52;;;;;-1:-1:-1;2044:56:52;;;26:21:-1;;;6:49;;2044:56:52;;;;;;-1:-1:-1;2044:56:52;-1:-1:-1;2172:34:52;;-1:-1:-1;2044:56:52;;-1:-1:-1;2199:6:52;2172:26;:34::i;12299:156:54:-;12362:5;12423:24;12435:11;12423;:24::i;:::-;12392:28;12404:15;;12392:11;:28::i;:::-;:55;;12299:156;-1:-1:-1;;12299:156:54:o;19573:1058:48:-;19636:4;19652:22;19684:13;19734:17;19746:4;19734:11;:17::i;:::-;19708:43;;-1:-1:-1;19708:43:48;-1:-1:-1;19830:10:48;;;:43;;;-1:-1:-1;;19844:14:48;:29;19830:43;19826:86;;;19896:5;19889:12;;;;;;19826:86;19940:1;:18;;19922:15;19969:559;19993:5;19989:1;:9;19969:559;;;20092:4;:11;20081:7;:22;20077:73;;20130:5;20123:12;;;;;;;;20077:73;20225:18;20246:42;20257:7;20280;20266:4;:11;:21;20246:4;:10;;:42;;;;;:::i;:::-;20225:63;;20302:16;20321:27;20342:5;20321:20;:27::i;:::-;20302:46;;-1:-1:-1;;20366:8:48;:23;20362:74;;;20416:5;20409:12;;;;;;;;;;20362:74;20498:19;;;;;-1:-1:-1;20000:3:48;;19969:559;;;-1:-1:-1;20613:11:48;;20602:22;;-1:-1:-1;;;19573:1058:48;;;:::o;20903:1072::-;20968:4;20984:22;21016:14;21068:18;21080:5;21068:11;:18::i;:::-;21041:45;;-1:-1:-1;21041:45:48;-1:-1:-1;21166:11:48;;;:44;;;-1:-1:-1;;21181:14:48;:29;21166:44;21162:87;;;21233:5;21226:12;;;;;;21162:87;21277:1;:18;;21259:15;21306:565;21330:6;21326:1;:10;21306:565;;;21430:5;:12;21419:7;:23;21415:74;;21469:5;21462:12;;;;;;;;21415:74;21613:18;21634:44;21646:7;21670;21655:5;:12;:22;21634:5;:11;;:44;;;;;:::i;:::-;21613:65;;21692:16;21711:28;21733:5;21711:21;:28::i;:::-;21692:47;;-1:-1:-1;;21757:8:48;:23;21753:74;;;21807:5;21800:12;;;;;;;;;;21753:74;21841:19;;;;;-1:-1:-1;21338:3:48;;21306:565;;14590:987;14679:12;14703:22;14735:14;14787:18;14799:5;14787:11;:18::i;:::-;14760:45;;-1:-1:-1;14760:45:48;-1:-1:-1;;;14823:29:48;;;14815:76;;;;-1:-1:-1;;;14815:76:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14918:6;14909;:15;14901:45;;;;;-1:-1:-1;;;14901:45:48;;;;;;;;;;;;-1:-1:-1;;;14901:45:48;;;;;;;;;;;;;;;14957:23;14991:12;15035:1;:18;;14991:12;15064:278;15090:6;15085:2;:11;15064:278;;;15132:44;15144:7;15168;15153:5;:12;:22;15132:5;:11;;:44;;;;;:::i;:::-;15119:57;;15197:33;15219:10;15197:21;:33::i;:::-;15190:40;;-1:-1:-1;;15252:4:48;:19;;15244:58;;;;;-1:-1:-1;;;15244:58:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;15316:15;;;;15098:5;;15064:278;;;;15365:44;15377:7;15401;15386:5;:12;:22;15365:5;:11;;:44;;;;;:::i;:::-;15352:57;;15426:33;15448:10;15426:21;:33::i;:::-;15419:40;;-1:-1:-1;;15477:4:48;:19;;15469:58;;;;;-1:-1:-1;;;15469:58:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;15544:26;:5;15556:7;15565:4;15544:26;:11;:26;:::i;:::-;15537:33;14590:987;-1:-1:-1;;;;;;;;14590:987:48:o;16155:246::-;16222:6;16240:21;16264:23;16279:7;16264:14;:23::i;:::-;16240:47;;16297:21;16321:27;16339:8;16321:17;:27::i;:::-;16297:51;;16372:21;16384:8;16372:11;:21::i;6862:976::-;6949:12;6973:22;7005:13;7055:17;7067:4;7055:11;:17::i;:::-;7029:43;;-1:-1:-1;7029:43:48;-1:-1:-1;;;7090:29:48;;;7082:76;;;;-1:-1:-1;;;7082:76:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7185:5;7176:6;:14;7168:43;;;;;-1:-1:-1;;;7168:43:48;;;;;;;;;;;;-1:-1:-1;;;7168:43:48;;;;;;;;;;;;;;;7222:23;7256:12;7300:1;:18;;7256:12;7329:281;7355:6;7350:2;:11;7329:281;;;7397:42;7408:7;7431;7417:4;:11;:21;7397:4;:10;;:42;;;;;:::i;:::-;7384:55;;7460:32;7481:10;7460:20;:32::i;:::-;7453:39;;-1:-1:-1;;7514:4:48;:19;;7506:55;;;;;-1:-1:-1;;;7506:55:48;;;;;;;;;;;;-1:-1:-1;;;7506:55:48;;;;;;;;;;;;;;;7585:14;;;;7363:5;;7329:281;;;;7633:42;7644:7;7667;7653:4;:11;:21;7633:4;:10;;:42;;;;;:::i;:::-;7620:55;;7692:32;7713:10;7692:20;:32::i;:::-;7685:39;;-1:-1:-1;;7742:4:48;:19;;7734:55;;;;;-1:-1:-1;;;7734:55:48;;;;;;;;;;;;-1:-1:-1;;;7734:55:48;;;;;;;;;;;;;;12524:126;12593:12;12624:19;:6;12637:1;12640:2;12624:19;:12;:19;:::i;23829:131::-;23902:12;23933:20;:7;23947:1;23950:2;23933:20;:13;:20;:::i;23392:178::-;23461:7;23538:25;-1:-1:-1;;;23555:7:48;23538:25;:16;:25;:::i;24182:131::-;24255:12;24286:20;:7;24300:2;24304:1;24286:20;:13;:20;:::i;1865:301:51:-;1925:7;2157:2;2152;:7;;;;;;;1865:301;-1:-1:-1;;;1865:301:51:o;16410:337:49:-;16505:14;16543:16;;;16577:13;;;:38;;;;;16611:4;16594:6;:13;:21;;16577:38;16569:70;;;;;-1:-1:-1;;;16569:70:49;;;;;;;;;;;;-1:-1:-1;;;16569:70:49;;;;;;;;;;;;;;;-1:-1:-1;;16693:28:49;;16709:2;16693:28;16683:48;;16659:82::o;25770:1009:48:-;25856:4;25932:2;25916:6;:13;:18;;;;;;:23;25912:66;;-1:-1:-1;25962:5:48;25955:12;;25912:66;26041:6;:13;26058:2;26041:19;26037:61;;;-1:-1:-1;26083:4:48;26076:11;;26037:61;26142:6;:13;26159:2;26142:19;26138:62;;;-1:-1:-1;26184:5:48;26177:12;;26138:62;26267:13;;26222:6;;26210:9;;26254:48;;:36;;26267:6;;-1:-1:-1;;26267:18:48;26283:2;26254:36;:12;:36;:::i;:48::-;26238:64;-1:-1:-1;26312:16:48;26331:31;:19;:6;26312:16;26347:2;26331:19;:12;:19;:::i;:31::-;26312:50;-1:-1:-1;26387:1:48;26373:366;26395:13;;26420:1;;26395:21;;26413:2;26395:21;:17;:21;:::i;:::-;26394:27;26390:1;:31;26373:366;;;26453:1;26446:4;:8;26458:1;26446:13;26442:257;;;26490:72;26509:24;:6;26526:2;26522:6;;;;26509:24;:12;:24;:::i;:::-;26552:8;26535:26;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26535:26:48;;;26490:18;:72::i;:::-;26479:83;;26442:257;;;26631:26;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;26631:26:48;;;;;;26612:72;;26659:24;;:6;;26672;;;;26659:24;:12;:24;:::i;:::-;26612:18;:72::i;:::-;26601:83;;26442:257;26727:1;26719:9;;;;26423:3;26373:366;;;-1:-1:-1;26755:17:48;;25770:1009;-1:-1:-1;;;;25770:1009:48:o;1907:424::-;1968:7;1977;1996:14;2013:29;2039:2;2013:25;:29::i;:::-;1996:46;-1:-1:-1;2057:13:48;;;2053:68;;2094:1;2103:2;2106:1;2103:5;;;;;;;;;;;;2086:24;;-1:-1:-1;2103:5:48;;;-1:-1:-1;2086:24:48;;-1:-1:-1;2086:24:48;2053:68;2150:8;2146:1;:12;2134:24;;:2;:9;:24;2130:78;;;-1:-1:-1;;;655:66:48;-1:-1:-1;2195:1:48;;-1:-1:-1;2174:23:48;;2130:78;2217:15;2235:53;2247:40;2265:21;:2;2274:1;2265:21;;;;:8;:21;:::i;2235:53::-;2298:26;;;;;-1:-1:-1;2217:71:48;;-1:-1:-1;;1907:424:48;;;;:::o;9151:372::-;9225:7;9244:22;9276:21;9341:27;9361:6;9341:19;:27::i;:::-;9307:61;;-1:-1:-1;9307:61:48;-1:-1:-1;;;9382:29:48;;9378:78;;;-1:-1:-1;;9427:18:48;;;;;;9378:78;9473:39;:43;;;9151:372;-1:-1:-1;;9151:372:48:o;13643:582::-;13719:7;13759:1;13742:7;:14;:18;13738:67;;;-1:-1:-1;;;13776:18:48;;13738:67;13814:24;13841:36;13855:1;13875;13858:7;:14;:18;13841:7;:13;;:36;;;;;:::i;:::-;13814:63;;13888:22;13920:27;13997:24;14009:11;13997;:24::i;:::-;13957:64;;-1:-1:-1;13957:64:48;-1:-1:-1;;;14036:29:48;;14032:78;;;-1:-1:-1;;14081:18:48;;;;;;;14032:78;14174:44;:5;:44;;-1:-1:-1;;13643:582:48;;;:::o;15812:126::-;15881:12;15912:19;:7;15926:1;15929;15912:19;:13;:19;:::i;25298:151::-;25383:7;25409:33;25434:2;25438;25417:24;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;25417:24:48;;;;;;;;;;-1:-1:-1;25417:24:48;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;25417:24:48;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25417:24:48;;;25409:7;:33::i;1052:437::-;1130:5;1157;1163:1;1157:8;;;;;;;;;;;;;;;1151:15;:23;1147:94;;;-1:-1:-1;1197:1:48;1190:8;;1147:94;1260:5;1266:1;1260:8;;;;;;;;;;;;;;;1273:4;1254:23;1250:94;;;-1:-1:-1;1300:1:48;1293:8;;1250:94;1363:5;1369:1;1363:8;;;;;;;;;;;;;;;1376:4;1357:23;1353:94;;;-1:-1:-1;1403:1:48;1396:8;;1353:94;-1:-1:-1;1464:1:48;1052:437;;;:::o;8454:439::-;8527:7;8536;8575:2;8559:6;:13;:18;8555:72;;;-1:-1:-1;;;655:66:48;-1:-1:-1;8614:1:48;8593:23;;8555:72;8636:27;8666:36;8679:2;8699;8683:6;:13;:18;8666:6;:12;;:36;;;;;:::i;:::-;8636:66;;8713:22;8745:21;8810:27;8822:14;8810:11;:27::i;:::-;8776:61;;-1:-1:-1;8776:61:48;-1:-1:-1;;;;8454:439:48;;;:::o",
  "source": "pragma solidity ^0.5.10;\n\n/** @title OnDemandSPV */\n/** @author Summa (https://summa.one) */\n\nimport {Relay} from \"./Relay.sol\";\nimport {ISPVRequestManager, ISPVConsumer} from \"./Interfaces.sol\";\nimport {BytesLib} from \"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\";\nimport {BTCUtils} from \"@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol\";\nimport {ValidateSPV} from \"@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol\";\nimport {SafeMath} from \"@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol\";\n\n\ncontract OnDemandSPV is ISPVRequestManager, Relay {\n    using SafeMath for uint256;\n    using BytesLib for bytes;\n    using BTCUtils for bytes;\n\n    struct ProofRequest {\n        bytes32 spends;\n        bytes32 pays;\n        uint256 notBefore;\n        address consumer;\n        uint64 paysValue;\n        uint8 numConfs;\n        address owner;\n        RequestStates state;\n    }\n\n    enum RequestStates { NONE, ACTIVE, CLOSED }\n    mapping (bytes32 => bool) internal validatedTxns;  // authenticated tx store\n    mapping (uint256 => ProofRequest) internal requests;  // request info\n    uint256 public constant BASE_COST = 24 * 60 * 60;  // 1 day\n\n    uint256 public nextID;\n    bytes32 public latestValidatedTx;\n    uint256 public remoteGasAllowance = 500000; // maximum gas for callback call\n\n    /// @notice                   Gives a starting point for the relay\n    /// @dev                      We don't check this AT ALL really. Don't use relays with bad genesis\n    /// @param  _genesisHeader    The starting header\n    /// @param  _height           The starting height\n    /// @param  _periodStart      The hash of the first header in the genesis epoch\n    constructor(\n        bytes memory _genesisHeader,\n        uint256 _height,\n        bytes32 _periodStart,\n        uint256 _firstID\n    ) Relay(\n        _genesisHeader,\n        _height,\n        _periodStart\n    ) public {\n        nextID = _firstID;\n    }\n\n    /// @notice                 Cancel a bitcoin event request.\n    /// @dev                    Prevents the relay from forwarding tx infromation\n    /// @param  _requestID      The ID of the request to be cancelled\n    /// @return                 True if succesful, error otherwise\n    function cancelRequest(uint256 _requestID) external returns (bool) {\n        ProofRequest storage _req = requests[_requestID];\n        require(_req.state == RequestStates.ACTIVE, \"Request not active\");\n        require(msg.sender == _req.consumer || msg.sender == _req.owner, \"Can only be cancelled by owner or consumer\");\n        _req.state = RequestStates.CLOSED;\n        emit RequestClosed(_requestID);\n        return true;\n    }\n\n    function getLatestValidatedTx() external view returns (bytes32) {\n        return latestValidatedTx;\n    }\n\n    /// @notice             Retrieve info about a request\n    /// @dev                Requests ids are numerical\n    /// @param  _requestID  The numerical ID of the request\n    /// @return             A tuple representation of the request struct\n    function getRequest(\n        uint256 _requestID\n    ) external view returns (\n        bytes32 spends,\n        bytes32 pays,\n        uint64 paysValue,\n        uint8 state,\n        address consumer,\n        address owner,\n        uint8 numConfs,\n        uint256 notBefore\n    ) {\n        ProofRequest storage _req = requests[_requestID];\n        spends = _req.spends;\n        pays = _req.pays;\n        paysValue = _req.paysValue;\n        state = uint8(_req.state);\n        consumer = _req.consumer;\n        owner = _req.owner;\n        numConfs = _req.numConfs;\n        notBefore = _req.notBefore;\n    }\n\n    /// @notice                 Subscribe to a feed of Bitcoin txns matching a request\n    /// @dev                    The request can be a spent utxo and/or a created utxo\n    /// @param  _spends         An outpoint that must be spent in acceptable txns (optional)\n    /// @param  _pays           An output script that must be paid in acceptable txns (optional)\n    /// @param  _paysValue      A minimum value that must be paid to the output script (optional)\n    /// @param  _consumer       The address of a ISPVConsumer exposing spv\n    /// @param  _numConfs       The minimum number of Bitcoin confirmations to accept\n    /// @param  _notBefore      A timestamp before which proofs are not accepted\n    /// @return                 A unique request ID.\n    function request(\n        bytes calldata _spends,\n        bytes calldata _pays,\n        uint64 _paysValue,\n        address _consumer,\n        uint8 _numConfs,\n        uint256 _notBefore\n    ) external returns (uint256) {\n        return _request(_spends, _pays, _paysValue, _consumer, _numConfs, _notBefore);\n    }\n\n    /// @notice                 Subscribe to a feed of Bitcoin txns matching a request\n    /// @dev                    The request can be a spent utxo and/or a created utxo\n    /// @param  _spends         An outpoint that must be spent in acceptable txns (optional)\n    /// @param  _pays           An output script that must be paid in acceptable txns (optional)\n    /// @param  _paysValue      A minimum value that must be paid to the output script (optional)\n    /// @param  _consumer       The address of a ISPVConsumer exposing spv\n    /// @param  _numConfs       The minimum number of Bitcoin confirmations to accept\n    /// @param  _notBefore      A timestamp before which proofs are not accepted\n    /// @return                 A unique request ID\n    function _request(\n        bytes memory _spends,\n        bytes memory _pays,\n        uint64 _paysValue,\n        address _consumer,\n        uint8 _numConfs,\n        uint256 _notBefore\n    ) internal returns (uint256) {\n        uint256 _requestID = nextID;\n        nextID = nextID + 1;\n        bytes memory pays = _pays;\n\n        require(_spends.length == 36 || _spends.length == 0, \"Not a valid UTXO\");\n\n        /* NB: This will fail if the output is not p2pkh, p2sh, p2wpkh, or p2wsh*/\n        uint256 _paysLen = pays.length;\n\n        // if it's not length-prefixed, length-prefix it\n        if (_paysLen > 0 && uint8(pays[0]) != _paysLen - 1) {\n            pays = abi.encodePacked(uint8(_paysLen), pays);\n            _paysLen += 1; // update the length because we made it longer\n        }\n\n        bytes memory _p = abi.encodePacked(bytes8(0), pays);\n        require(\n            _paysLen == 0 ||  // no request OR\n            _p.extractHash().length > 0 || // standard output OR\n            _p.extractOpReturnData().length > 0, // OP_RETURN output\n            \"Not a standard output type\");\n\n        require(_spends.length > 0 || _paysLen > 0, \"No request specified\");\n\n        ProofRequest storage _req = requests[_requestID];\n        _req.owner = msg.sender;\n\n        if (_spends.length > 0) {\n            _req.spends = keccak256(_spends);\n        }\n        if (_paysLen > 0) {\n            _req.pays = keccak256(pays);\n        }\n        if (_paysValue > 0) {\n            _req.paysValue = _paysValue;\n        }\n        if (_numConfs > 0 && _numConfs < 241) { //241 is arbitray. 40 hours\n            _req.numConfs = _numConfs;\n        }\n        if (_notBefore > 0) {\n            _req.notBefore = _notBefore;\n        }\n        _req.consumer = _consumer;\n        _req.state = RequestStates.ACTIVE;\n\n        emit NewProofRequest(msg.sender, _requestID, _paysValue, _spends, pays);\n\n        return _requestID;\n    }\n\n    /// @notice                 Provide a proof of a tx that satisfies some request\n    /// @dev                    The caller must specify which inputs, which outputs, and which request\n    /// @param  _header         The header containing the merkleroot committing to the tx\n    /// @param  _proof          The merkle proof intermediate nodes\n    /// @param  _version        The tx version, always the first 4 bytes of the tx\n    /// @param  _locktime       The tx locktime, always the last 4 bytes of the tx\n    /// @param  _index          The index of the tx in the merkle tree's leaves\n    /// @param  _reqIndices  The input and output index to check against the request, packed\n    /// @param  _vin            The tx input vector\n    /// @param  _vout           The tx output vector\n    /// @param  _requestID       The id of the request that has been triggered\n    /// @return                 True if succesful, error otherwise\n    function provideProof(\n        bytes calldata _header,\n        bytes calldata _proof,\n        bytes4 _version,\n        bytes4 _locktime,\n        uint256 _index,\n        uint16 _reqIndices,\n        bytes calldata _vin,\n        bytes calldata _vout,\n        uint256 _requestID\n    ) external returns (bool) {\n        bytes32 _txid = abi.encodePacked(_version, _vin, _vout, _locktime).hash256();\n        /*\n        NB: this shortcuts validation of any txn we've seen before\n            repeats can omit header, proof, and index\n        */\n        if (!validatedTxns[_txid]) {\n            _checkInclusion(\n                _header,\n                _proof,\n                _index,\n                _txid,\n                _requestID);\n            validatedTxns[_txid] = true;\n            latestValidatedTx = _txid;\n        }\n        _checkRequests(_reqIndices, _vin, _vout, _requestID);\n        _callCallback(_txid, _reqIndices, _vin, _vout, _requestID);\n        return true;\n    }\n\n    /// @notice             Notify a consumer that one of its requests has been triggered\n    /// @dev                We include information about the tx that triggered it, so the consumer can take actions\n    /// @param  _vin        The tx input vector\n    /// @param  _vout       The tx output vector\n    /// @param  _txid       The transaction ID\n    /// @param  _requestID   The id of the request that has been triggered\n    function _callCallback(\n        bytes32 _txid,\n        uint16 _reqIndices,\n        bytes memory _vin,\n        bytes memory _vout,\n        uint256 _requestID\n    ) internal returns (bool) {\n        ProofRequest storage _req = requests[_requestID];\n        ISPVConsumer c = ISPVConsumer(_req.consumer);\n\n        uint8 _inputIndex = uint8(_reqIndices >> 8);\n        uint8 _outputIndex = uint8(_reqIndices & 0xff);\n\n        /*\n        NB:\n        We want to make the remote call, but we don't care about results\n        We use the low-level call so that we can ignore reverts and set gas\n        */\n        address(c).call.gas(remoteGasAllowance)(\n            abi.encodePacked(\n                c.spv.selector,\n                abi.encode(_txid, _vin, _vout, _requestID, _inputIndex, _outputIndex)\n            )\n        );\n\n        emit RequestFilled(_txid, _requestID);\n\n        return true;\n    }\n\n    /// @notice             Verifies inclusion of a tx in a header, and that header in the Relay chain\n    /// @dev                Specifically we check that both the best tip and the heaviest common header confirm it\n    /// @param  _header     The header containing the merkleroot committing to the tx\n    /// @param  _proof      The merkle proof intermediate nodes\n    /// @param  _index      The index of the tx in the merkle tree's leaves\n    /// @param  _txid       The txid that is the proof leaf\n    /// @param _requestID   The ID of the request to check against\n    function _checkInclusion(\n        bytes memory _header,\n        bytes memory _proof,\n        uint256 _index,\n        bytes32 _txid,\n        uint256 _requestID\n    ) internal view returns (bool) {\n        require(\n            ValidateSPV.prove(\n                _txid,\n                _header.extractMerkleRootLE().toBytes32(),\n                _proof,\n                _index),\n            \"Bad inclusion proof\");\n\n        bytes32 _headerHash = _header.hash256();\n        bytes32 _GCD = getLastReorgCommonAncestor();\n\n        require(\n            _isAncestor(\n                _headerHash,\n                _GCD,\n                240),\n            \"GCD does not confirm header\");\n        uint8 _numConfs = requests[_requestID].numConfs;\n        require(\n            _getConfs(_headerHash) >= _numConfs,\n            \"Insufficient confirmations\");\n\n        return true;\n    }\n\n    /// @notice             Finds the number of headers on top of the argument\n    /// @dev                Bounded to 6400 gas (8 looksups) max\n    /// @param _headerHash  The LE double-sha2 header hash\n    /// @return             The number of headers on top\n    function _getConfs(bytes32 _headerHash) internal view returns (uint8) {\n        return uint8(_findHeight(bestKnownDigest) - _findHeight(_headerHash));\n    }\n\n    /// @notice                 Verifies that a tx meets the requester's request\n    /// @dev                    Requests can be specify an input, and output, and/or an output value\n    /// @param  _reqIndices  The input and output index to check against the request, packed\n    /// @param  _vin            The tx input vector\n    /// @param  _vout           The tx output vector\n    /// @param  _requestID       The id of the request to check\n    function _checkRequests (\n        uint16 _reqIndices,\n        bytes memory _vin,\n        bytes memory _vout,\n        uint256 _requestID\n    ) internal view returns (bool) {\n        require(_vin.validateVin(), \"Vin is malformatted\");\n        require(_vout.validateVout(), \"Vout is malformatted\");\n\n        uint8 _inputIndex = uint8(_reqIndices >> 8);\n        uint8 _outputIndex = uint8(_reqIndices & 0xff);\n\n        ProofRequest storage _req = requests[_requestID];\n        require(_req.notBefore <= block.timestamp, \"Request is submitted too early\");\n        require(_req.state == RequestStates.ACTIVE, \"Request is not active\");\n\n        bytes32 _pays = _req.pays;\n        bool _hasPays = _pays != bytes32(0);\n        if (_hasPays) {\n            bytes memory _out = _vout.extractOutputAtIndex(uint8(_outputIndex));\n            bytes memory _scriptPubkey = _out.slice(8, _out.length - 8);\n            require(\n                keccak256(_scriptPubkey) == _pays,\n                \"Does not match pays request\");\n            uint64 _paysValue = _req.paysValue;\n            require(\n                _paysValue == 0 ||\n                _out.extractValue() >= _paysValue,\n                \"Does not match value request\");\n        }\n\n        bytes32 _spends = _req.spends;\n        bool _hasSpends = _spends != bytes32(0);\n        if (_hasSpends) {\n            bytes memory _in = _vin.extractInputAtIndex(uint8(_inputIndex));\n            require(\n                !_hasSpends ||\n                keccak256(_in.extractOutpoint()) == _spends,\n                \"Does not match spends request\");\n        }\n        return true;\n    }\n}\n",
  "sourcePath": "@summa-tx/relay-sol/contracts/OnDemandSPV.sol",
  "ast": {
    "absolutePath": "@summa-tx/relay-sol/contracts/OnDemandSPV.sol",
    "exportedSymbols": {
      "OnDemandSPV": [
        15277
      ]
    },
    "id": 15278,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 14395,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".10"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:54"
      },
      {
        "absolutePath": "@summa-tx/relay-sol/contracts/Relay.sol",
        "file": "./Relay.sol",
        "id": 14397,
        "nodeType": "ImportDirective",
        "scope": 15278,
        "sourceUnit": 16401,
        "src": "94:34:54",
        "symbolAliases": [
          {
            "foreign": 14396,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@summa-tx/relay-sol/contracts/Interfaces.sol",
        "file": "./Interfaces.sol",
        "id": 14400,
        "nodeType": "ImportDirective",
        "scope": 15278,
        "sourceUnit": 14394,
        "src": "129:66:54",
        "symbolAliases": [
          {
            "foreign": 14398,
            "local": null
          },
          {
            "foreign": 14399,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
        "file": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
        "id": 14402,
        "nodeType": "ImportDirective",
        "scope": 15278,
        "sourceUnit": 13433,
        "src": "196:74:54",
        "symbolAliases": [
          {
            "foreign": 14401,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
        "file": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
        "id": 14404,
        "nodeType": "ImportDirective",
        "scope": 15278,
        "sourceUnit": 13217,
        "src": "271:74:54",
        "symbolAliases": [
          {
            "foreign": 14403,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
        "file": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
        "id": 14406,
        "nodeType": "ImportDirective",
        "scope": 15278,
        "sourceUnit": 14208,
        "src": "346:80:54",
        "symbolAliases": [
          {
            "foreign": 14405,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol",
        "file": "@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol",
        "id": 14408,
        "nodeType": "ImportDirective",
        "scope": 15278,
        "sourceUnit": 13922,
        "src": "427:74:54",
        "symbolAliases": [
          {
            "foreign": 14407,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14409,
              "name": "ISPVRequestManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14293,
              "src": "528:18:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISPVRequestManager_$14293",
                "typeString": "contract ISPVRequestManager"
              }
            },
            "id": 14410,
            "nodeType": "InheritanceSpecifier",
            "src": "528:18:54"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 14411,
              "name": "Relay",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16343,
              "src": "548:5:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Relay_$16343",
                "typeString": "contract Relay"
              }
            },
            "id": 14412,
            "nodeType": "InheritanceSpecifier",
            "src": "548:5:54"
          }
        ],
        "contractDependencies": [
          14293,
          14393,
          16343
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 15277,
        "linearizedBaseContracts": [
          15277,
          16343,
          14393,
          14293
        ],
        "name": "OnDemandSPV",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 14415,
            "libraryName": {
              "contractScope": null,
              "id": 14413,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13921,
              "src": "566:8:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$13921",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "560:27:54",
            "typeName": {
              "id": 14414,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "579:7:54",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 14418,
            "libraryName": {
              "contractScope": null,
              "id": 14416,
              "name": "BytesLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13432,
              "src": "598:8:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesLib_$13432",
                "typeString": "library BytesLib"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "592:25:54",
            "typeName": {
              "id": 14417,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "611:5:54",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 14421,
            "libraryName": {
              "contractScope": null,
              "id": 14419,
              "name": "BTCUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13216,
              "src": "628:8:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BTCUtils_$13216",
                "typeString": "library BTCUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "622:25:54",
            "typeName": {
              "id": 14420,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "641:5:54",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "canonicalName": "OnDemandSPV.ProofRequest",
            "id": 14438,
            "members": [
              {
                "constant": false,
                "id": 14423,
                "name": "spends",
                "nodeType": "VariableDeclaration",
                "scope": 14438,
                "src": "683:14:54",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 14422,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "683:7:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 14425,
                "name": "pays",
                "nodeType": "VariableDeclaration",
                "scope": 14438,
                "src": "707:12:54",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 14424,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "707:7:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 14427,
                "name": "notBefore",
                "nodeType": "VariableDeclaration",
                "scope": 14438,
                "src": "729:17:54",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 14426,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "729:7:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 14429,
                "name": "consumer",
                "nodeType": "VariableDeclaration",
                "scope": 14438,
                "src": "756:16:54",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 14428,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "756:7:54",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 14431,
                "name": "paysValue",
                "nodeType": "VariableDeclaration",
                "scope": 14438,
                "src": "782:16:54",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 14430,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "782:6:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 14433,
                "name": "numConfs",
                "nodeType": "VariableDeclaration",
                "scope": 14438,
                "src": "808:14:54",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 14432,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "808:5:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 14435,
                "name": "owner",
                "nodeType": "VariableDeclaration",
                "scope": 14438,
                "src": "832:13:54",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 14434,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "832:7:54",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 14437,
                "name": "state",
                "nodeType": "VariableDeclaration",
                "scope": 14438,
                "src": "855:19:54",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_RequestStates_$14442",
                  "typeString": "enum OnDemandSPV.RequestStates"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 14436,
                  "name": "RequestStates",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 14442,
                  "src": "855:13:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_RequestStates_$14442",
                    "typeString": "enum OnDemandSPV.RequestStates"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "ProofRequest",
            "nodeType": "StructDefinition",
            "scope": 15277,
            "src": "653:228:54",
            "visibility": "public"
          },
          {
            "canonicalName": "OnDemandSPV.RequestStates",
            "id": 14442,
            "members": [
              {
                "id": 14439,
                "name": "NONE",
                "nodeType": "EnumValue",
                "src": "908:4:54"
              },
              {
                "id": 14440,
                "name": "ACTIVE",
                "nodeType": "EnumValue",
                "src": "914:6:54"
              },
              {
                "id": 14441,
                "name": "CLOSED",
                "nodeType": "EnumValue",
                "src": "922:6:54"
              }
            ],
            "name": "RequestStates",
            "nodeType": "EnumDefinition",
            "src": "887:43:54"
          },
          {
            "constant": false,
            "id": 14446,
            "name": "validatedTxns",
            "nodeType": "VariableDeclaration",
            "scope": 15277,
            "src": "935:48:54",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
              "typeString": "mapping(bytes32 => bool)"
            },
            "typeName": {
              "id": 14445,
              "keyType": {
                "id": 14443,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "944:7:54",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "935:25:54",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                "typeString": "mapping(bytes32 => bool)"
              },
              "valueType": {
                "id": 14444,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "955:4:54",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 14450,
            "name": "requests",
            "nodeType": "VariableDeclaration",
            "scope": 15277,
            "src": "1016:51:54",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ProofRequest_$14438_storage_$",
              "typeString": "mapping(uint256 => struct OnDemandSPV.ProofRequest)"
            },
            "typeName": {
              "id": 14449,
              "keyType": {
                "id": 14447,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1025:7:54",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1016:33:54",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ProofRequest_$14438_storage_$",
                "typeString": "mapping(uint256 => struct OnDemandSPV.ProofRequest)"
              },
              "valueType": {
                "contractScope": null,
                "id": 14448,
                "name": "ProofRequest",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 14438,
                "src": "1036:12:54",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                  "typeString": "struct OnDemandSPV.ProofRequest"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 14457,
            "name": "BASE_COST",
            "nodeType": "VariableDeclaration",
            "scope": 15277,
            "src": "1090:48:54",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 14451,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1090:7:54",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_rational_86400_by_1",
                "typeString": "int_const 86400"
              },
              "id": 14456,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "commonType": {
                  "typeIdentifier": "t_rational_1440_by_1",
                  "typeString": "int_const 1440"
                },
                "id": 14454,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "leftExpression": {
                  "argumentTypes": null,
                  "hexValue": "3234",
                  "id": 14452,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1126:2:54",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_24_by_1",
                    "typeString": "int_const 24"
                  },
                  "value": "24"
                },
                "nodeType": "BinaryOperation",
                "operator": "*",
                "rightExpression": {
                  "argumentTypes": null,
                  "hexValue": "3630",
                  "id": 14453,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1131:2:54",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_60_by_1",
                    "typeString": "int_const 60"
                  },
                  "value": "60"
                },
                "src": "1126:7:54",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1440_by_1",
                  "typeString": "int_const 1440"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "*",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "3630",
                "id": 14455,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1136:2:54",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_60_by_1",
                  "typeString": "int_const 60"
                },
                "value": "60"
              },
              "src": "1126:12:54",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_86400_by_1",
                "typeString": "int_const 86400"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 14459,
            "name": "nextID",
            "nodeType": "VariableDeclaration",
            "scope": 15277,
            "src": "1155:21:54",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 14458,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1155:7:54",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 14461,
            "name": "latestValidatedTx",
            "nodeType": "VariableDeclaration",
            "scope": 15277,
            "src": "1182:32:54",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 14460,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1182:7:54",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 14464,
            "name": "remoteGasAllowance",
            "nodeType": "VariableDeclaration",
            "scope": 15277,
            "src": "1220:42:54",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 14462,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1220:7:54",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "353030303030",
              "id": 14463,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1256:6:54",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_500000_by_1",
                "typeString": "int_const 500000"
              },
              "value": "500000"
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 14484,
              "nodeType": "Block",
              "src": "1886:34:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14480,
                      "name": "nextID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14459,
                      "src": "1896:6:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 14481,
                      "name": "_firstID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14472,
                      "src": "1905:8:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1896:17:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14483,
                  "nodeType": "ExpressionStatement",
                  "src": "1896:17:54"
                }
              ]
            },
            "documentation": "@notice                   Gives a starting point for the relay\n @dev                      We don't check this AT ALL really. Don't use relays with bad genesis\n @param  _genesisHeader    The starting header\n @param  _height           The starting height\n @param  _periodStart      The hash of the first header in the genesis epoch",
            "id": 14485,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 14475,
                    "name": "_genesisHeader",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14466,
                    "src": "1819:14:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 14476,
                    "name": "_height",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14468,
                    "src": "1843:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 14477,
                    "name": "_periodStart",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14470,
                    "src": "1860:12:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 14478,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 14474,
                  "name": "Relay",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 16343,
                  "src": "1804:5:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Relay_$16343_$",
                    "typeString": "type(contract Relay)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1804:74:54"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14466,
                  "name": "_genesisHeader",
                  "nodeType": "VariableDeclaration",
                  "scope": 14485,
                  "src": "1689:27:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14465,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1689:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14468,
                  "name": "_height",
                  "nodeType": "VariableDeclaration",
                  "scope": 14485,
                  "src": "1726:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14467,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1726:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14470,
                  "name": "_periodStart",
                  "nodeType": "VariableDeclaration",
                  "scope": 14485,
                  "src": "1751:20:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14469,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1751:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14472,
                  "name": "_firstID",
                  "nodeType": "VariableDeclaration",
                  "scope": 14485,
                  "src": "1781:16:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14471,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1781:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1679:124:54"
            },
            "returnParameters": {
              "id": 14479,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1886:0:54"
            },
            "scope": 15277,
            "src": "1668:252:54",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14535,
              "nodeType": "Block",
              "src": "2276:364:54",
              "statements": [
                {
                  "assignments": [
                    14493
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14493,
                      "name": "_req",
                      "nodeType": "VariableDeclaration",
                      "scope": 14535,
                      "src": "2286:25:54",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                        "typeString": "struct OnDemandSPV.ProofRequest"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14492,
                        "name": "ProofRequest",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14438,
                        "src": "2286:12:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14497,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 14494,
                      "name": "requests",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14450,
                      "src": "2314:8:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ProofRequest_$14438_storage_$",
                        "typeString": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)"
                      }
                    },
                    "id": 14496,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 14495,
                      "name": "_requestID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14487,
                      "src": "2323:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2314:20:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProofRequest_$14438_storage",
                      "typeString": "struct OnDemandSPV.ProofRequest storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2286:48:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_RequestStates_$14442",
                          "typeString": "enum OnDemandSPV.RequestStates"
                        },
                        "id": 14503,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14499,
                            "name": "_req",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14493,
                            "src": "2352:4:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                              "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                            }
                          },
                          "id": 14500,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "state",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14437,
                          "src": "2352:10:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_RequestStates_$14442",
                            "typeString": "enum OnDemandSPV.RequestStates"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14501,
                            "name": "RequestStates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14442,
                            "src": "2366:13:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_RequestStates_$14442_$",
                              "typeString": "type(enum OnDemandSPV.RequestStates)"
                            }
                          },
                          "id": 14502,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "ACTIVE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2366:20:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_RequestStates_$14442",
                            "typeString": "enum OnDemandSPV.RequestStates"
                          }
                        },
                        "src": "2352:34:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "52657175657374206e6f7420616374697665",
                        "id": 14504,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2388:20:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8db6659d192d7886b84695d587e39167fa2d51f8755fe7359272dc4e93c1d38f",
                          "typeString": "literal_string \"Request not active\""
                        },
                        "value": "Request not active"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8db6659d192d7886b84695d587e39167fa2d51f8755fe7359272dc4e93c1d38f",
                          "typeString": "literal_string \"Request not active\""
                        }
                      ],
                      "id": 14498,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "2344:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2344:65:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14506,
                  "nodeType": "ExpressionStatement",
                  "src": "2344:65:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 14518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 14512,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14508,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18360,
                              "src": "2427:3:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 14509,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2427:10:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14510,
                              "name": "_req",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14493,
                              "src": "2441:4:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                                "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                              }
                            },
                            "id": 14511,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "consumer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14429,
                            "src": "2441:13:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2427:27:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 14517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14513,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18360,
                              "src": "2458:3:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 14514,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2458:10:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14515,
                              "name": "_req",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14493,
                              "src": "2472:4:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                                "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                              }
                            },
                            "id": 14516,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14435,
                            "src": "2472:10:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2458:24:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2427:55:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43616e206f6e6c792062652063616e63656c6c6564206279206f776e6572206f7220636f6e73756d6572",
                        "id": 14519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2484:44:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8c11ae7ecc9d44cd814ec878b3b1998240e091c28a8589770f1ce8f56aa2f337",
                          "typeString": "literal_string \"Can only be cancelled by owner or consumer\""
                        },
                        "value": "Can only be cancelled by owner or consumer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8c11ae7ecc9d44cd814ec878b3b1998240e091c28a8589770f1ce8f56aa2f337",
                          "typeString": "literal_string \"Can only be cancelled by owner or consumer\""
                        }
                      ],
                      "id": 14507,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "2419:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2419:110:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14521,
                  "nodeType": "ExpressionStatement",
                  "src": "2419:110:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14527,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14522,
                        "name": "_req",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14493,
                        "src": "2539:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                        }
                      },
                      "id": 14524,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "state",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14437,
                      "src": "2539:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_RequestStates_$14442",
                        "typeString": "enum OnDemandSPV.RequestStates"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14525,
                        "name": "RequestStates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14442,
                        "src": "2552:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_RequestStates_$14442_$",
                          "typeString": "type(enum OnDemandSPV.RequestStates)"
                        }
                      },
                      "id": 14526,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "CLOSED",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2552:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_RequestStates_$14442",
                        "typeString": "enum OnDemandSPV.RequestStates"
                      }
                    },
                    "src": "2539:33:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_RequestStates_$14442",
                      "typeString": "enum OnDemandSPV.RequestStates"
                    }
                  },
                  "id": 14528,
                  "nodeType": "ExpressionStatement",
                  "src": "2539:33:54"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14530,
                        "name": "_requestID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14487,
                        "src": "2601:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14529,
                      "name": "RequestClosed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14241,
                      "src": "2587:13:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 14531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2587:25:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14532,
                  "nodeType": "EmitStatement",
                  "src": "2582:30:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 14533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2629:4:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 14491,
                  "id": 14534,
                  "nodeType": "Return",
                  "src": "2622:11:54"
                }
              ]
            },
            "documentation": "@notice                 Cancel a bitcoin event request.\n @dev                    Prevents the relay from forwarding tx infromation\n @param  _requestID      The ID of the request to be cancelled\n @return                 True if succesful, error otherwise",
            "id": 14536,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "cancelRequest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14487,
                  "name": "_requestID",
                  "nodeType": "VariableDeclaration",
                  "scope": 14536,
                  "src": "2232:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14486,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2232:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2231:20:54"
            },
            "returnParameters": {
              "id": 14491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14490,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14536,
                  "src": "2270:4:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14489,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2270:4:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2269:6:54"
            },
            "scope": 15277,
            "src": "2209:431:54",
            "stateMutability": "nonpayable",
            "superFunction": 14271,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14543,
              "nodeType": "Block",
              "src": "2710:41:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14541,
                    "name": "latestValidatedTx",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14461,
                    "src": "2727:17:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 14540,
                  "id": 14542,
                  "nodeType": "Return",
                  "src": "2720:24:54"
                }
              ]
            },
            "documentation": null,
            "id": 14544,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLatestValidatedTx",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14537,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2675:2:54"
            },
            "returnParameters": {
              "id": 14540,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14539,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14544,
                  "src": "2701:7:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14538,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2701:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2700:9:54"
            },
            "scope": 15277,
            "src": "2646:105:54",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14613,
              "nodeType": "Block",
              "src": "3279:324:54",
              "statements": [
                {
                  "assignments": [
                    14566
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14566,
                      "name": "_req",
                      "nodeType": "VariableDeclaration",
                      "scope": 14613,
                      "src": "3289:25:54",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                        "typeString": "struct OnDemandSPV.ProofRequest"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14565,
                        "name": "ProofRequest",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14438,
                        "src": "3289:12:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14570,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 14567,
                      "name": "requests",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14450,
                      "src": "3317:8:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ProofRequest_$14438_storage_$",
                        "typeString": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)"
                      }
                    },
                    "id": 14569,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 14568,
                      "name": "_requestID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14546,
                      "src": "3326:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3317:20:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProofRequest_$14438_storage",
                      "typeString": "struct OnDemandSPV.ProofRequest storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3289:48:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14571,
                      "name": "spends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14549,
                      "src": "3347:6:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14572,
                        "name": "_req",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14566,
                        "src": "3356:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                        }
                      },
                      "id": 14573,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "spends",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14423,
                      "src": "3356:11:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3347:20:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 14575,
                  "nodeType": "ExpressionStatement",
                  "src": "3347:20:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14576,
                      "name": "pays",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14551,
                      "src": "3377:4:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14577,
                        "name": "_req",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14566,
                        "src": "3384:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                        }
                      },
                      "id": 14578,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "pays",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14425,
                      "src": "3384:9:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3377:16:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 14580,
                  "nodeType": "ExpressionStatement",
                  "src": "3377:16:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14581,
                      "name": "paysValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14553,
                      "src": "3403:9:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14582,
                        "name": "_req",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14566,
                        "src": "3415:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                        }
                      },
                      "id": 14583,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paysValue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14431,
                      "src": "3415:14:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "3403:26:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 14585,
                  "nodeType": "ExpressionStatement",
                  "src": "3403:26:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14591,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14586,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14555,
                      "src": "3439:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 14588,
                            "name": "_req",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14566,
                            "src": "3453:4:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                              "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                            }
                          },
                          "id": 14589,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "state",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14437,
                          "src": "3453:10:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_RequestStates_$14442",
                            "typeString": "enum OnDemandSPV.RequestStates"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_RequestStates_$14442",
                            "typeString": "enum OnDemandSPV.RequestStates"
                          }
                        ],
                        "id": 14587,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3447:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint8_$",
                          "typeString": "type(uint8)"
                        },
                        "typeName": "uint8"
                      },
                      "id": 14590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3447:17:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "3439:25:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 14592,
                  "nodeType": "ExpressionStatement",
                  "src": "3439:25:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14593,
                      "name": "consumer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14557,
                      "src": "3474:8:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14594,
                        "name": "_req",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14566,
                        "src": "3485:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                        }
                      },
                      "id": 14595,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "consumer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14429,
                      "src": "3485:13:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3474:24:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14597,
                  "nodeType": "ExpressionStatement",
                  "src": "3474:24:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14598,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14559,
                      "src": "3508:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14599,
                        "name": "_req",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14566,
                        "src": "3516:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                        }
                      },
                      "id": 14600,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14435,
                      "src": "3516:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3508:18:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14602,
                  "nodeType": "ExpressionStatement",
                  "src": "3508:18:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14603,
                      "name": "numConfs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14561,
                      "src": "3536:8:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14604,
                        "name": "_req",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14566,
                        "src": "3547:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                        }
                      },
                      "id": 14605,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "numConfs",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14433,
                      "src": "3547:13:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "3536:24:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 14607,
                  "nodeType": "ExpressionStatement",
                  "src": "3536:24:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14608,
                      "name": "notBefore",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14563,
                      "src": "3570:9:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14609,
                        "name": "_req",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14566,
                        "src": "3582:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                        }
                      },
                      "id": 14610,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "notBefore",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14427,
                      "src": "3582:14:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3570:26:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14612,
                  "nodeType": "ExpressionStatement",
                  "src": "3570:26:54"
                }
              ]
            },
            "documentation": "@notice             Retrieve info about a request\n @dev                Requests ids are numerical\n @param  _requestID  The numerical ID of the request\n @return             A tuple representation of the request struct",
            "id": 14614,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRequest",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14546,
                  "name": "_requestID",
                  "nodeType": "VariableDeclaration",
                  "scope": 14614,
                  "src": "3032:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14545,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3032:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3022:34:54"
            },
            "returnParameters": {
              "id": 14564,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14549,
                  "name": "spends",
                  "nodeType": "VariableDeclaration",
                  "scope": 14614,
                  "src": "3089:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14548,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3089:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14551,
                  "name": "pays",
                  "nodeType": "VariableDeclaration",
                  "scope": 14614,
                  "src": "3113:12:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14550,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3113:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14553,
                  "name": "paysValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 14614,
                  "src": "3135:16:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 14552,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3135:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14555,
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "scope": 14614,
                  "src": "3161:11:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 14554,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3161:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14557,
                  "name": "consumer",
                  "nodeType": "VariableDeclaration",
                  "scope": 14614,
                  "src": "3182:16:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14556,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3182:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14559,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 14614,
                  "src": "3208:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3208:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14561,
                  "name": "numConfs",
                  "nodeType": "VariableDeclaration",
                  "scope": 14614,
                  "src": "3231:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 14560,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3231:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14563,
                  "name": "notBefore",
                  "nodeType": "VariableDeclaration",
                  "scope": 14614,
                  "src": "3255:17:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14562,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3255:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3079:199:54"
            },
            "scope": 15277,
            "src": "3003:600:54",
            "stateMutability": "view",
            "superFunction": 14292,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14640,
              "nodeType": "Block",
              "src": "4584:94:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14632,
                        "name": "_spends",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14616,
                        "src": "4610:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14633,
                        "name": "_pays",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14618,
                        "src": "4619:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14634,
                        "name": "_paysValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14620,
                        "src": "4626:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14635,
                        "name": "_consumer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14622,
                        "src": "4638:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14636,
                        "name": "_numConfs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14624,
                        "src": "4649:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14637,
                        "name": "_notBefore",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14626,
                        "src": "4660:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14631,
                      "name": "_request",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14864,
                      "src": "4601:8:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint64_$_t_address_$_t_uint8_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (bytes memory,bytes memory,uint64,address,uint8,uint256) returns (uint256)"
                      }
                    },
                    "id": 14638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4601:70:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 14630,
                  "id": 14639,
                  "nodeType": "Return",
                  "src": "4594:77:54"
                }
              ]
            },
            "documentation": "@notice                 Subscribe to a feed of Bitcoin txns matching a request\n @dev                    The request can be a spent utxo and/or a created utxo\n @param  _spends         An outpoint that must be spent in acceptable txns (optional)\n @param  _pays           An output script that must be paid in acceptable txns (optional)\n @param  _paysValue      A minimum value that must be paid to the output script (optional)\n @param  _consumer       The address of a ISPVConsumer exposing spv\n @param  _numConfs       The minimum number of Bitcoin confirmations to accept\n @param  _notBefore      A timestamp before which proofs are not accepted\n @return                 A unique request ID.",
            "id": 14641,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "request",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14616,
                  "name": "_spends",
                  "nodeType": "VariableDeclaration",
                  "scope": 14641,
                  "src": "4391:22:54",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14615,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4391:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14618,
                  "name": "_pays",
                  "nodeType": "VariableDeclaration",
                  "scope": 14641,
                  "src": "4423:20:54",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14617,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4423:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14620,
                  "name": "_paysValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 14641,
                  "src": "4453:17:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 14619,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "4453:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14622,
                  "name": "_consumer",
                  "nodeType": "VariableDeclaration",
                  "scope": 14641,
                  "src": "4480:17:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14621,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4480:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14624,
                  "name": "_numConfs",
                  "nodeType": "VariableDeclaration",
                  "scope": 14641,
                  "src": "4507:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 14623,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4507:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14626,
                  "name": "_notBefore",
                  "nodeType": "VariableDeclaration",
                  "scope": 14641,
                  "src": "4532:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14625,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4532:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4381:175:54"
            },
            "returnParameters": {
              "id": 14630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14629,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14641,
                  "src": "4575:7:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14628,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4575:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4574:9:54"
            },
            "scope": 15277,
            "src": "4365:313:54",
            "stateMutability": "nonpayable",
            "superFunction": 14264,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14863,
              "nodeType": "Block",
              "src": "5655:1697:54",
              "statements": [
                {
                  "assignments": [
                    14659
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14659,
                      "name": "_requestID",
                      "nodeType": "VariableDeclaration",
                      "scope": 14863,
                      "src": "5665:18:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14658,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5665:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14661,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 14660,
                    "name": "nextID",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14459,
                    "src": "5686:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5665:27:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 14662,
                      "name": "nextID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14459,
                      "src": "5702:6:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 14665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 14663,
                        "name": "nextID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14459,
                        "src": "5711:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 14664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5720:1:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "5711:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5702:19:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14667,
                  "nodeType": "ExpressionStatement",
                  "src": "5702:19:54"
                },
                {
                  "assignments": [
                    14669
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14669,
                      "name": "pays",
                      "nodeType": "VariableDeclaration",
                      "scope": 14863,
                      "src": "5731:17:54",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 14668,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "5731:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14671,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 14670,
                    "name": "_pays",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14645,
                    "src": "5751:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5731:25:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 14681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14673,
                              "name": "_spends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14643,
                              "src": "5775:7:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 14674,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5775:14:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3336",
                            "id": 14675,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5793:2:54",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_36_by_1",
                              "typeString": "int_const 36"
                            },
                            "value": "36"
                          },
                          "src": "5775:20:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14680,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14677,
                              "name": "_spends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14643,
                              "src": "5799:7:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 14678,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5799:14:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 14679,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5817:1:54",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5799:19:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5775:43:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420612076616c6964205554584f",
                        "id": 14682,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5820:18:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e85ada8fc469dee8c135d2dda2bf5320fb23f80a44516901e07c6214cf73f8fe",
                          "typeString": "literal_string \"Not a valid UTXO\""
                        },
                        "value": "Not a valid UTXO"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e85ada8fc469dee8c135d2dda2bf5320fb23f80a44516901e07c6214cf73f8fe",
                          "typeString": "literal_string \"Not a valid UTXO\""
                        }
                      ],
                      "id": 14672,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "5767:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5767:72:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14684,
                  "nodeType": "ExpressionStatement",
                  "src": "5767:72:54"
                },
                {
                  "assignments": [
                    14686
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14686,
                      "name": "_paysLen",
                      "nodeType": "VariableDeclaration",
                      "scope": 14863,
                      "src": "5933:16:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14685,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5933:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14689,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 14687,
                      "name": "pays",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14669,
                      "src": "5952:4:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 14688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "5952:11:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5933:30:54"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 14702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 14692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 14690,
                        "name": "_paysLen",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14686,
                        "src": "6035:8:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 14691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6046:1:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6035:12:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 14701,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 14694,
                              "name": "pays",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14669,
                              "src": "6057:4:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 14696,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14695,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6062:1:54",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6057:7:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          ],
                          "id": 14693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6051:5:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint8_$",
                            "typeString": "type(uint8)"
                          },
                          "typeName": "uint8"
                        },
                        "id": 14697,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6051:14:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14700,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 14698,
                          "name": "_paysLen",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14686,
                          "src": "6069:8:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 14699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6080:1:54",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "6069:12:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6051:30:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6035:46:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14718,
                  "nodeType": "IfStatement",
                  "src": "6031:197:54",
                  "trueBody": {
                    "id": 14717,
                    "nodeType": "Block",
                    "src": "6083:145:54",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 14711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 14703,
                            "name": "pays",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14669,
                            "src": "6097:4:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 14707,
                                    "name": "_paysLen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14686,
                                    "src": "6127:8:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 14706,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6121:5:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint8_$",
                                    "typeString": "type(uint8)"
                                  },
                                  "typeName": "uint8"
                                },
                                "id": 14708,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6121:15:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 14709,
                                "name": "pays",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14669,
                                "src": "6138:4:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 14704,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18347,
                                "src": "6104:3:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 14705,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6104:16:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 14710,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6104:39:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "6097:46:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 14712,
                        "nodeType": "ExpressionStatement",
                        "src": "6097:46:54"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 14715,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 14713,
                            "name": "_paysLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14686,
                            "src": "6157:8:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 14714,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6169:1:54",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "6157:13:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14716,
                        "nodeType": "ExpressionStatement",
                        "src": "6157:13:54"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    14720
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14720,
                      "name": "_p",
                      "nodeType": "VariableDeclaration",
                      "scope": 14863,
                      "src": "6238:15:54",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 14719,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6238:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14728,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 14724,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6280:1:54",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 14723,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6273:6:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes8_$",
                            "typeString": "type(bytes8)"
                          },
                          "typeName": "bytes8"
                        },
                        "id": 14725,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6273:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14726,
                        "name": "pays",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14669,
                        "src": "6284:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 14721,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18347,
                        "src": "6256:3:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 14722,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6256:16:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 14727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6256:33:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6238:51:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 14746,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 14739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14732,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 14730,
                              "name": "_paysLen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14686,
                              "src": "6320:8:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14731,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6332:1:54",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "6320:13:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14738,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 14733,
                                    "name": "_p",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14720,
                                    "src": "6367:2:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 14734,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "extractHash",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12682,
                                  "src": "6367:14:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (bytes memory)"
                                  }
                                },
                                "id": 14735,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6367:16:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 14736,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "6367:23:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 14737,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6393:1:54",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "6367:27:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6320:74:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 14740,
                                  "name": "_p",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14720,
                                  "src": "6432:2:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 14741,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "extractOpReturnData",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 12533,
                                "src": "6432:22:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory) pure returns (bytes memory)"
                                }
                              },
                              "id": 14742,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6432:24:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 14743,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6432:31:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 14744,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6466:1:54",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6432:35:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6320:147:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f742061207374616e64617264206f75747075742074797065",
                        "id": 14747,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6501:28:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9168008da2dac08ddfb43a92d860110a2cfd0c4f45bad096985566040c5cb993",
                          "typeString": "literal_string \"Not a standard output type\""
                        },
                        "value": "Not a standard output type"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9168008da2dac08ddfb43a92d860110a2cfd0c4f45bad096985566040c5cb993",
                          "typeString": "literal_string \"Not a standard output type\""
                        }
                      ],
                      "id": 14729,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "6299:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6299:231:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14749,
                  "nodeType": "ExpressionStatement",
                  "src": "6299:231:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 14758,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14751,
                              "name": "_spends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14643,
                              "src": "6549:7:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 14752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6549:14:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 14753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6566:1:54",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6549:18:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14757,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 14755,
                            "name": "_paysLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14686,
                            "src": "6571:8:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 14756,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6582:1:54",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6571:12:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6549:34:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f207265717565737420737065636966696564",
                        "id": 14759,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6585:22:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ea412dc5cb606183944736a595fe8ac896e88850ccb6e8100f740a40c7b00966",
                          "typeString": "literal_string \"No request specified\""
                        },
                        "value": "No request specified"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ea412dc5cb606183944736a595fe8ac896e88850ccb6e8100f740a40c7b00966",
                          "typeString": "literal_string \"No request specified\""
                        }
                      ],
                      "id": 14750,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "6541:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6541:67:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14761,
                  "nodeType": "ExpressionStatement",
                  "src": "6541:67:54"
                },
                {
                  "assignments": [
                    14763
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14763,
                      "name": "_req",
                      "nodeType": "VariableDeclaration",
                      "scope": 14863,
                      "src": "6619:25:54",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                        "typeString": "struct OnDemandSPV.ProofRequest"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14762,
                        "name": "ProofRequest",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14438,
                        "src": "6619:12:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14767,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 14764,
                      "name": "requests",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14450,
                      "src": "6647:8:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ProofRequest_$14438_storage_$",
                        "typeString": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)"
                      }
                    },
                    "id": 14766,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 14765,
                      "name": "_requestID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14659,
                      "src": "6656:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6647:20:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProofRequest_$14438_storage",
                      "typeString": "struct OnDemandSPV.ProofRequest storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6619:48:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14768,
                        "name": "_req",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14763,
                        "src": "6677:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                        }
                      },
                      "id": 14770,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14435,
                      "src": "6677:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14771,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18360,
                        "src": "6690:3:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 14772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6690:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "6677:23:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14774,
                  "nodeType": "ExpressionStatement",
                  "src": "6677:23:54"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14775,
                        "name": "_spends",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14643,
                        "src": "6715:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 14776,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6715:14:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 14777,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6732:1:54",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6715:18:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14788,
                  "nodeType": "IfStatement",
                  "src": "6711:81:54",
                  "trueBody": {
                    "id": 14787,
                    "nodeType": "Block",
                    "src": "6735:57:54",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 14785,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14779,
                              "name": "_req",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14763,
                              "src": "6749:4:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                                "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                              }
                            },
                            "id": 14781,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "spends",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14423,
                            "src": "6749:11:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 14783,
                                "name": "_spends",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14643,
                                "src": "6773:7:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 14782,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18354,
                              "src": "6763:9:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 14784,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6763:18:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "6749:32:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 14786,
                        "nodeType": "ExpressionStatement",
                        "src": "6749:32:54"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 14789,
                      "name": "_paysLen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14686,
                      "src": "6805:8:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 14790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6816:1:54",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6805:12:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14801,
                  "nodeType": "IfStatement",
                  "src": "6801:70:54",
                  "trueBody": {
                    "id": 14800,
                    "nodeType": "Block",
                    "src": "6819:52:54",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 14798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14792,
                              "name": "_req",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14763,
                              "src": "6833:4:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                                "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                              }
                            },
                            "id": 14794,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "pays",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14425,
                            "src": "6833:9:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 14796,
                                "name": "pays",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14669,
                                "src": "6855:4:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 14795,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18354,
                              "src": "6845:9:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 14797,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6845:15:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "6833:27:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 14799,
                        "nodeType": "ExpressionStatement",
                        "src": "6833:27:54"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 14804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 14802,
                      "name": "_paysValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14647,
                      "src": "6884:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 14803,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6897:1:54",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6884:14:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14812,
                  "nodeType": "IfStatement",
                  "src": "6880:72:54",
                  "trueBody": {
                    "id": 14811,
                    "nodeType": "Block",
                    "src": "6900:52:54",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 14809,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14805,
                              "name": "_req",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14763,
                              "src": "6914:4:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                                "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                              }
                            },
                            "id": 14807,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "paysValue",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14431,
                            "src": "6914:14:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 14808,
                            "name": "_paysValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14647,
                            "src": "6931:10:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "6914:27:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 14810,
                        "nodeType": "ExpressionStatement",
                        "src": "6914:27:54"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 14819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 14815,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 14813,
                        "name": "_numConfs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14651,
                        "src": "6965:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 14814,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6977:1:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6965:13:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 14818,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 14816,
                        "name": "_numConfs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14651,
                        "src": "6982:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "323431",
                        "id": 14817,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6994:3:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_241_by_1",
                          "typeString": "int_const 241"
                        },
                        "value": "241"
                      },
                      "src": "6982:15:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6965:32:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14827,
                  "nodeType": "IfStatement",
                  "src": "6961:116:54",
                  "trueBody": {
                    "id": 14826,
                    "nodeType": "Block",
                    "src": "6999:78:54",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 14824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14820,
                              "name": "_req",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14763,
                              "src": "7041:4:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                                "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                              }
                            },
                            "id": 14822,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "numConfs",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14433,
                            "src": "7041:13:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 14823,
                            "name": "_numConfs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14651,
                            "src": "7057:9:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "7041:25:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 14825,
                        "nodeType": "ExpressionStatement",
                        "src": "7041:25:54"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 14828,
                      "name": "_notBefore",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14653,
                      "src": "7090:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 14829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7103:1:54",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7090:14:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14838,
                  "nodeType": "IfStatement",
                  "src": "7086:72:54",
                  "trueBody": {
                    "id": 14837,
                    "nodeType": "Block",
                    "src": "7106:52:54",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 14835,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 14831,
                              "name": "_req",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14763,
                              "src": "7120:4:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                                "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                              }
                            },
                            "id": 14833,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "notBefore",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14427,
                            "src": "7120:14:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 14834,
                            "name": "_notBefore",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14653,
                            "src": "7137:10:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7120:27:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14836,
                        "nodeType": "ExpressionStatement",
                        "src": "7120:27:54"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14843,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14839,
                        "name": "_req",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14763,
                        "src": "7167:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                        }
                      },
                      "id": 14841,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "consumer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14429,
                      "src": "7167:13:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 14842,
                      "name": "_consumer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14649,
                      "src": "7183:9:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7167:25:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14844,
                  "nodeType": "ExpressionStatement",
                  "src": "7167:25:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14845,
                        "name": "_req",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14763,
                        "src": "7202:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                        }
                      },
                      "id": 14847,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "state",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14437,
                      "src": "7202:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_RequestStates_$14442",
                        "typeString": "enum OnDemandSPV.RequestStates"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 14848,
                        "name": "RequestStates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14442,
                        "src": "7215:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_RequestStates_$14442_$",
                          "typeString": "type(enum OnDemandSPV.RequestStates)"
                        }
                      },
                      "id": 14849,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "ACTIVE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7215:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_RequestStates_$14442",
                        "typeString": "enum OnDemandSPV.RequestStates"
                      }
                    },
                    "src": "7202:33:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_RequestStates_$14442",
                      "typeString": "enum OnDemandSPV.RequestStates"
                    }
                  },
                  "id": 14851,
                  "nodeType": "ExpressionStatement",
                  "src": "7202:33:54"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14853,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18360,
                          "src": "7267:3:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 14854,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7267:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14855,
                        "name": "_requestID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14659,
                        "src": "7279:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14856,
                        "name": "_paysValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14647,
                        "src": "7291:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14857,
                        "name": "_spends",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14643,
                        "src": "7303:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14858,
                        "name": "pays",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14669,
                        "src": "7312:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 14852,
                      "name": "NewProofRequest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14237,
                      "src": "7251:15:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint64_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint64,bytes memory,bytes memory)"
                      }
                    },
                    "id": 14859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7251:66:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14860,
                  "nodeType": "EmitStatement",
                  "src": "7246:71:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14861,
                    "name": "_requestID",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14659,
                    "src": "7335:10:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 14657,
                  "id": 14862,
                  "nodeType": "Return",
                  "src": "7328:17:54"
                }
              ]
            },
            "documentation": "@notice                 Subscribe to a feed of Bitcoin txns matching a request\n @dev                    The request can be a spent utxo and/or a created utxo\n @param  _spends         An outpoint that must be spent in acceptable txns (optional)\n @param  _pays           An output script that must be paid in acceptable txns (optional)\n @param  _paysValue      A minimum value that must be paid to the output script (optional)\n @param  _consumer       The address of a ISPVConsumer exposing spv\n @param  _numConfs       The minimum number of Bitcoin confirmations to accept\n @param  _notBefore      A timestamp before which proofs are not accepted\n @return                 A unique request ID",
            "id": 14864,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_request",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14654,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14643,
                  "name": "_spends",
                  "nodeType": "VariableDeclaration",
                  "scope": 14864,
                  "src": "5466:20:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14642,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5466:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14645,
                  "name": "_pays",
                  "nodeType": "VariableDeclaration",
                  "scope": 14864,
                  "src": "5496:18:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14644,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5496:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14647,
                  "name": "_paysValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 14864,
                  "src": "5524:17:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 14646,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "5524:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14649,
                  "name": "_consumer",
                  "nodeType": "VariableDeclaration",
                  "scope": 14864,
                  "src": "5551:17:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14648,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5551:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14651,
                  "name": "_numConfs",
                  "nodeType": "VariableDeclaration",
                  "scope": 14864,
                  "src": "5578:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 14650,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5578:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14653,
                  "name": "_notBefore",
                  "nodeType": "VariableDeclaration",
                  "scope": 14864,
                  "src": "5603:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14652,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5603:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5456:171:54"
            },
            "returnParameters": {
              "id": 14657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14656,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14864,
                  "src": "5646:7:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14655,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5646:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5645:9:54"
            },
            "scope": 15277,
            "src": "5439:1913:54",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14940,
              "nodeType": "Block",
              "src": "8598:668:54",
              "statements": [
                {
                  "assignments": [
                    14888
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14888,
                      "name": "_txid",
                      "nodeType": "VariableDeclaration",
                      "scope": 14940,
                      "src": "8608:13:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 14887,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8608:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14898,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14891,
                            "name": "_version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14870,
                            "src": "8641:8:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14892,
                            "name": "_vin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14878,
                            "src": "8651:4:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14893,
                            "name": "_vout",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14880,
                            "src": "8657:5:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 14894,
                            "name": "_locktime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14872,
                            "src": "8664:9:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            },
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            },
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 14889,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18347,
                            "src": "8624:3:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 14890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "8624:16:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 14895,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8624:50:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 14896,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash256",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11851,
                      "src": "8624:58:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 14897,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8624:60:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8608:76:54"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 14902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "8841:21:54",
                    "subExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14899,
                        "name": "validatedTxns",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14446,
                        "src": "8842:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                          "typeString": "mapping(bytes32 => bool)"
                        }
                      },
                      "id": 14901,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 14900,
                        "name": "_txid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14888,
                        "src": "8856:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "8842:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 14922,
                  "nodeType": "IfStatement",
                  "src": "8837:272:54",
                  "trueBody": {
                    "id": 14921,
                    "nodeType": "Block",
                    "src": "8864:245:54",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 14904,
                              "name": "_header",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14866,
                              "src": "8911:7:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 14905,
                              "name": "_proof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14868,
                              "src": "8936:6:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 14906,
                              "name": "_index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14874,
                              "src": "8960:6:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 14907,
                              "name": "_txid",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14888,
                              "src": "8984:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 14908,
                              "name": "_requestID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14882,
                              "src": "9007:10:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14903,
                            "name": "_checkInclusion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15086,
                            "src": "8878:15:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (bytes memory,bytes memory,uint256,bytes32,uint256) view returns (bool)"
                            }
                          },
                          "id": 14909,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8878:140:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 14910,
                        "nodeType": "ExpressionStatement",
                        "src": "8878:140:54"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 14915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 14911,
                              "name": "validatedTxns",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14446,
                              "src": "9032:13:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                                "typeString": "mapping(bytes32 => bool)"
                              }
                            },
                            "id": 14913,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 14912,
                              "name": "_txid",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14888,
                              "src": "9046:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9032:20:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 14914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9055:4:54",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "9032:27:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 14916,
                        "nodeType": "ExpressionStatement",
                        "src": "9032:27:54"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 14919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 14917,
                            "name": "latestValidatedTx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14461,
                            "src": "9073:17:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 14918,
                            "name": "_txid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14888,
                            "src": "9093:5:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "9073:25:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 14920,
                        "nodeType": "ExpressionStatement",
                        "src": "9073:25:54"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14924,
                        "name": "_reqIndices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14876,
                        "src": "9133:11:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14925,
                        "name": "_vin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14878,
                        "src": "9146:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14926,
                        "name": "_vout",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14880,
                        "src": "9152:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14927,
                        "name": "_requestID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14882,
                        "src": "9159:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14923,
                      "name": "_checkRequests",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15276,
                      "src": "9118:14:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint16_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint16,bytes memory,bytes memory,uint256) view returns (bool)"
                      }
                    },
                    "id": 14928,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9118:52:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14929,
                  "nodeType": "ExpressionStatement",
                  "src": "9118:52:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14931,
                        "name": "_txid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14888,
                        "src": "9194:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14932,
                        "name": "_reqIndices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14876,
                        "src": "9201:11:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14933,
                        "name": "_vin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14878,
                        "src": "9214:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14934,
                        "name": "_vout",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14880,
                        "src": "9220:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14935,
                        "name": "_requestID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14882,
                        "src": "9227:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14930,
                      "name": "_callCallback",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15017,
                      "src": "9180:13:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint16_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint16,bytes memory,bytes memory,uint256) returns (bool)"
                      }
                    },
                    "id": 14936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9180:58:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14937,
                  "nodeType": "ExpressionStatement",
                  "src": "9180:58:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 14938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9255:4:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 14886,
                  "id": 14939,
                  "nodeType": "Return",
                  "src": "9248:11:54"
                }
              ]
            },
            "documentation": "@notice                 Provide a proof of a tx that satisfies some request\n @dev                    The caller must specify which inputs, which outputs, and which request\n @param  _header         The header containing the merkleroot committing to the tx\n @param  _proof          The merkle proof intermediate nodes\n @param  _version        The tx version, always the first 4 bytes of the tx\n @param  _locktime       The tx locktime, always the last 4 bytes of the tx\n @param  _index          The index of the tx in the merkle tree's leaves\n @param  _reqIndices  The input and output index to check against the request, packed\n @param  _vin            The tx input vector\n @param  _vout           The tx output vector\n @param  _requestID       The id of the request that has been triggered\n @return                 True if succesful, error otherwise",
            "id": 14941,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "provideProof",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14866,
                  "name": "_header",
                  "nodeType": "VariableDeclaration",
                  "scope": 14941,
                  "src": "8324:22:54",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14865,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8324:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14868,
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 14941,
                  "src": "8356:21:54",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14867,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8356:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14870,
                  "name": "_version",
                  "nodeType": "VariableDeclaration",
                  "scope": 14941,
                  "src": "8387:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 14869,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "8387:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14872,
                  "name": "_locktime",
                  "nodeType": "VariableDeclaration",
                  "scope": 14941,
                  "src": "8412:16:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 14871,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "8412:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14874,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 14941,
                  "src": "8438:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14873,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8438:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14876,
                  "name": "_reqIndices",
                  "nodeType": "VariableDeclaration",
                  "scope": 14941,
                  "src": "8462:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 14875,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "8462:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14878,
                  "name": "_vin",
                  "nodeType": "VariableDeclaration",
                  "scope": 14941,
                  "src": "8490:19:54",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14877,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8490:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14880,
                  "name": "_vout",
                  "nodeType": "VariableDeclaration",
                  "scope": 14941,
                  "src": "8519:20:54",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14879,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8519:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14882,
                  "name": "_requestID",
                  "nodeType": "VariableDeclaration",
                  "scope": 14941,
                  "src": "8549:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14881,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8549:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8314:259:54"
            },
            "returnParameters": {
              "id": 14886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14885,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14941,
                  "src": "8592:4:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14884,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8592:4:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8591:6:54"
            },
            "scope": 15277,
            "src": "8293:973:54",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 15016,
              "nodeType": "Block",
              "src": "9884:705:54",
              "statements": [
                {
                  "assignments": [
                    14957
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14957,
                      "name": "_req",
                      "nodeType": "VariableDeclaration",
                      "scope": 15016,
                      "src": "9894:25:54",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                        "typeString": "struct OnDemandSPV.ProofRequest"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14956,
                        "name": "ProofRequest",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14438,
                        "src": "9894:12:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14961,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 14958,
                      "name": "requests",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14450,
                      "src": "9922:8:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ProofRequest_$14438_storage_$",
                        "typeString": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)"
                      }
                    },
                    "id": 14960,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 14959,
                      "name": "_requestID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14951,
                      "src": "9931:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9922:20:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProofRequest_$14438_storage",
                      "typeString": "struct OnDemandSPV.ProofRequest storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9894:48:54"
                },
                {
                  "assignments": [
                    14963
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14963,
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "scope": 15016,
                      "src": "9952:14:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ISPVConsumer_$14225",
                        "typeString": "contract ISPVConsumer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 14962,
                        "name": "ISPVConsumer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14225,
                        "src": "9952:12:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISPVConsumer_$14225",
                          "typeString": "contract ISPVConsumer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14968,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14965,
                          "name": "_req",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14957,
                          "src": "9982:4:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                            "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                          }
                        },
                        "id": 14966,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "consumer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14429,
                        "src": "9982:13:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14964,
                      "name": "ISPVConsumer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14225,
                      "src": "9969:12:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ISPVConsumer_$14225_$",
                        "typeString": "type(contract ISPVConsumer)"
                      }
                    },
                    "id": 14967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9969:27:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISPVConsumer_$14225",
                      "typeString": "contract ISPVConsumer"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9952:44:54"
                },
                {
                  "assignments": [
                    14970
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14970,
                      "name": "_inputIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 15016,
                      "src": "10007:17:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 14969,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "10007:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14976,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 14974,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 14972,
                          "name": "_reqIndices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14945,
                          "src": "10033:11:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "38",
                          "id": 14973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10048:1:54",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_8_by_1",
                            "typeString": "int_const 8"
                          },
                          "value": "8"
                        },
                        "src": "10033:16:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 14971,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "10027:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint8_$",
                        "typeString": "type(uint8)"
                      },
                      "typeName": "uint8"
                    },
                    "id": 14975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10027:23:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10007:43:54"
                },
                {
                  "assignments": [
                    14978
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14978,
                      "name": "_outputIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 15016,
                      "src": "10060:18:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 14977,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "10060:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14984,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 14982,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 14980,
                          "name": "_reqIndices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14945,
                          "src": "10087:11:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30786666",
                          "id": 14981,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10101:4:54",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_255_by_1",
                            "typeString": "int_const 255"
                          },
                          "value": "0xff"
                        },
                        "src": "10087:18:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 14979,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "10081:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint8_$",
                        "typeString": "type(uint8)"
                      },
                      "typeName": "uint8"
                    },
                    "id": 14983,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10081:25:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10060:46:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 14994,
                                "name": "c",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14963,
                                "src": "10387:1:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ISPVConsumer_$14225",
                                  "typeString": "contract ISPVConsumer"
                                }
                              },
                              "id": 14995,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "spv",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14224,
                              "src": "10387:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint8_$_t_uint8_$returns$__$",
                                "typeString": "function (bytes32,bytes memory,bytes memory,uint256,uint8,uint8) external"
                              }
                            },
                            "id": 14996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "selector",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10387:14:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 14999,
                                "name": "_txid",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14943,
                                "src": "10430:5:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 15000,
                                "name": "_vin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14947,
                                "src": "10437:4:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 15001,
                                "name": "_vout",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14949,
                                "src": "10443:5:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 15002,
                                "name": "_requestID",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14951,
                                "src": "10450:10:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 15003,
                                "name": "_inputIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14970,
                                "src": "10462:11:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 15004,
                                "name": "_outputIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14978,
                                "src": "10475:12:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 14997,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18347,
                                "src": "10419:3:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 14998,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encode",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "10419:10:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 15005,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10419:69:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 14992,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18347,
                            "src": "10353:3:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 14993,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10353:16:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 15006,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10353:149:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 14990,
                          "name": "remoteGasAllowance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14464,
                          "src": "10320:18:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 14986,
                                "name": "c",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14963,
                                "src": "10308:1:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ISPVConsumer_$14225",
                                  "typeString": "contract ISPVConsumer"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ISPVConsumer_$14225",
                                  "typeString": "contract ISPVConsumer"
                                }
                              ],
                              "id": 14985,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "10300:7:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 14987,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10300:10:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 14988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10300:15:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                          }
                        },
                        "id": 14989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "gas",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10300:19:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_setgas_pure$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas_$",
                          "typeString": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"
                        }
                      },
                      "id": 14991,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10300:39:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$gas",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 15007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10300:212:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "id": 15008,
                  "nodeType": "ExpressionStatement",
                  "src": "10300:212:54"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15010,
                        "name": "_txid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14943,
                        "src": "10542:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 15011,
                        "name": "_requestID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14951,
                        "src": "10549:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15009,
                      "name": "RequestFilled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14247,
                      "src": "10528:13:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32,uint256)"
                      }
                    },
                    "id": 15012,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10528:32:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15013,
                  "nodeType": "EmitStatement",
                  "src": "10523:37:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 15014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "10578:4:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 14955,
                  "id": 15015,
                  "nodeType": "Return",
                  "src": "10571:11:54"
                }
              ]
            },
            "documentation": "@notice             Notify a consumer that one of its requests has been triggered\n @dev                We include information about the tx that triggered it, so the consumer can take actions\n @param  _vin        The tx input vector\n @param  _vout       The tx output vector\n @param  _txid       The transaction ID\n @param  _requestID   The id of the request that has been triggered",
            "id": 15017,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_callCallback",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14952,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14943,
                  "name": "_txid",
                  "nodeType": "VariableDeclaration",
                  "scope": 15017,
                  "src": "9729:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14942,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9729:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14945,
                  "name": "_reqIndices",
                  "nodeType": "VariableDeclaration",
                  "scope": 15017,
                  "src": "9752:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 14944,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "9752:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14947,
                  "name": "_vin",
                  "nodeType": "VariableDeclaration",
                  "scope": 15017,
                  "src": "9780:17:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14946,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9780:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14949,
                  "name": "_vout",
                  "nodeType": "VariableDeclaration",
                  "scope": 15017,
                  "src": "9807:18:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14948,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9807:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14951,
                  "name": "_requestID",
                  "nodeType": "VariableDeclaration",
                  "scope": 15017,
                  "src": "9835:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14950,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9835:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9719:140:54"
            },
            "returnParameters": {
              "id": 14955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14954,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15017,
                  "src": "9878:4:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14953,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9878:4:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9877:6:54"
            },
            "scope": 15277,
            "src": "9697:892:54",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15085,
              "nodeType": "Block",
              "src": "11360:673:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15035,
                            "name": "_txid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15025,
                            "src": "11426:5:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 15036,
                                    "name": "_header",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15019,
                                    "src": "11449:7:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 15037,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "extractMerkleRootLE",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12880,
                                  "src": "11449:27:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (bytes memory)"
                                  }
                                },
                                "id": 15038,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11449:29:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 15039,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toBytes32",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13400,
                              "src": "11449:39:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 15040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11449:41:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 15041,
                            "name": "_proof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15021,
                            "src": "11508:6:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 15042,
                            "name": "_index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15023,
                            "src": "11532:6:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 15033,
                            "name": "ValidateSPV",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14207,
                            "src": "11391:11:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ValidateSPV_$14207_$",
                              "typeString": "type(library ValidateSPV)"
                            }
                          },
                          "id": 15034,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "prove",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14031,
                          "src": "11391:17:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,bytes memory,uint256) pure returns (bool)"
                          }
                        },
                        "id": 15043,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11391:148:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "42616420696e636c7573696f6e2070726f6f66",
                        "id": 15044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11553:21:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5751ef9989bda086d164ad8360af3789de2a27dbfadcb90d57c6eb7971147307",
                          "typeString": "literal_string \"Bad inclusion proof\""
                        },
                        "value": "Bad inclusion proof"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5751ef9989bda086d164ad8360af3789de2a27dbfadcb90d57c6eb7971147307",
                          "typeString": "literal_string \"Bad inclusion proof\""
                        }
                      ],
                      "id": 15032,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "11370:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11370:205:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15046,
                  "nodeType": "ExpressionStatement",
                  "src": "11370:205:54"
                },
                {
                  "assignments": [
                    15048
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15048,
                      "name": "_headerHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 15085,
                      "src": "11586:19:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 15047,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11586:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15052,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 15049,
                        "name": "_header",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15019,
                        "src": "11608:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 15050,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash256",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11851,
                      "src": "11608:15:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 15051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11608:17:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11586:39:54"
                },
                {
                  "assignments": [
                    15054
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15054,
                      "name": "_GCD",
                      "nodeType": "VariableDeclaration",
                      "scope": 15085,
                      "src": "11635:12:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 15053,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11635:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15057,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 15055,
                      "name": "getLastReorgCommonAncestor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15436,
                      "src": "11650:26:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                        "typeString": "function () view returns (bytes32)"
                      }
                    },
                    "id": 15056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11650:28:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11635:43:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 15060,
                            "name": "_headerHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15048,
                            "src": "11739:11:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 15061,
                            "name": "_GCD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15054,
                            "src": "11768:4:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "323430",
                            "id": 15062,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11790:3:54",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_240_by_1",
                              "typeString": "int_const 240"
                            },
                            "value": "240"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_rational_240_by_1",
                              "typeString": "int_const 240"
                            }
                          ],
                          "id": 15059,
                          "name": "_isAncestor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15999,
                          "src": "11710:11:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,uint256) view returns (bool)"
                          }
                        },
                        "id": 15063,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11710:84:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "47434420646f6573206e6f7420636f6e6669726d20686561646572",
                        "id": 15064,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11808:29:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f9087d2c84abb76dfdad3c911fd56fcfbdd0637d4726b5147f1bcf37115514b6",
                          "typeString": "literal_string \"GCD does not confirm header\""
                        },
                        "value": "GCD does not confirm header"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f9087d2c84abb76dfdad3c911fd56fcfbdd0637d4726b5147f1bcf37115514b6",
                          "typeString": "literal_string \"GCD does not confirm header\""
                        }
                      ],
                      "id": 15058,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "11689:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11689:149:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15066,
                  "nodeType": "ExpressionStatement",
                  "src": "11689:149:54"
                },
                {
                  "assignments": [
                    15068
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15068,
                      "name": "_numConfs",
                      "nodeType": "VariableDeclaration",
                      "scope": 15085,
                      "src": "11848:15:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 15067,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "11848:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15073,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 15069,
                        "name": "requests",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14450,
                        "src": "11866:8:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ProofRequest_$14438_storage_$",
                          "typeString": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)"
                        }
                      },
                      "id": 15071,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 15070,
                        "name": "_requestID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15027,
                        "src": "11875:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11866:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProofRequest_$14438_storage",
                        "typeString": "struct OnDemandSPV.ProofRequest storage ref"
                      }
                    },
                    "id": 15072,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "numConfs",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14433,
                    "src": "11866:29:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11848:47:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 15079,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 15076,
                              "name": "_headerHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15048,
                              "src": "11936:11:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 15075,
                            "name": "_getConfs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15104,
                            "src": "11926:9:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint8_$",
                              "typeString": "function (bytes32) view returns (uint8)"
                            }
                          },
                          "id": 15077,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11926:22:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 15078,
                          "name": "_numConfs",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15068,
                          "src": "11952:9:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "11926:35:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e73756666696369656e7420636f6e6669726d6174696f6e73",
                        "id": 15080,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11975:28:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_244db06159704071644f876024bad8c53627b61799cff959f07a577dd4fbf2aa",
                          "typeString": "literal_string \"Insufficient confirmations\""
                        },
                        "value": "Insufficient confirmations"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_244db06159704071644f876024bad8c53627b61799cff959f07a577dd4fbf2aa",
                          "typeString": "literal_string \"Insufficient confirmations\""
                        }
                      ],
                      "id": 15074,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "11905:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11905:99:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15082,
                  "nodeType": "ExpressionStatement",
                  "src": "11905:99:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 15083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12022:4:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 15031,
                  "id": 15084,
                  "nodeType": "Return",
                  "src": "12015:11:54"
                }
              ]
            },
            "documentation": "@notice             Verifies inclusion of a tx in a header, and that header in the Relay chain\n @dev                Specifically we check that both the best tip and the heaviest common header confirm it\n @param  _header     The header containing the merkleroot committing to the tx\n @param  _proof      The merkle proof intermediate nodes\n @param  _index      The index of the tx in the merkle tree's leaves\n @param  _txid       The txid that is the proof leaf\n @param _requestID   The ID of the request to check against",
            "id": 15086,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkInclusion",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15019,
                  "name": "_header",
                  "nodeType": "VariableDeclaration",
                  "scope": 15086,
                  "src": "11200:20:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 15018,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11200:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15021,
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 15086,
                  "src": "11230:19:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 15020,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11230:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15023,
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "scope": 15086,
                  "src": "11259:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15022,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11259:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15025,
                  "name": "_txid",
                  "nodeType": "VariableDeclaration",
                  "scope": 15086,
                  "src": "11283:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 15024,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11283:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15027,
                  "name": "_requestID",
                  "nodeType": "VariableDeclaration",
                  "scope": 15086,
                  "src": "11306:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15026,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11306:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11190:140:54"
            },
            "returnParameters": {
              "id": 15031,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15030,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15086,
                  "src": "11354:4:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 15029,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11354:4:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11353:6:54"
            },
            "scope": 15277,
            "src": "11166:867:54",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15103,
              "nodeType": "Block",
              "src": "12369:86:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 15100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 15095,
                              "name": "bestKnownDigest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15310,
                              "src": "12404:15:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 15094,
                            "name": "_findHeight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15905,
                            "src": "12392:11:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint256_$",
                              "typeString": "function (bytes32) view returns (uint256)"
                            }
                          },
                          "id": 15096,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12392:28:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 15098,
                              "name": "_headerHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15088,
                              "src": "12435:11:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 15097,
                            "name": "_findHeight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15905,
                            "src": "12423:11:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint256_$",
                              "typeString": "function (bytes32) view returns (uint256)"
                            }
                          },
                          "id": 15099,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12423:24:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12392:55:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15093,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "12386:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint8_$",
                        "typeString": "type(uint8)"
                      },
                      "typeName": "uint8"
                    },
                    "id": 15101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12386:62:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 15092,
                  "id": 15102,
                  "nodeType": "Return",
                  "src": "12379:69:54"
                }
              ]
            },
            "documentation": "@notice             Finds the number of headers on top of the argument\n @dev                Bounded to 6400 gas (8 looksups) max\n @param _headerHash  The LE double-sha2 header hash\n @return             The number of headers on top",
            "id": 15104,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getConfs",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15088,
                  "name": "_headerHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 15104,
                  "src": "12318:19:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 15087,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12318:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12317:21:54"
            },
            "returnParameters": {
              "id": 15092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15091,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15104,
                  "src": "12362:5:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 15090,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "12362:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12361:7:54"
            },
            "scope": 15277,
            "src": "12299:156:54",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15275,
              "nodeType": "Block",
              "src": "13076:1442:54",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 15118,
                            "name": "_vin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15108,
                            "src": "13094:4:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 15119,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validateVin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12774,
                          "src": "13094:16:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (bool)"
                          }
                        },
                        "id": 15120,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13094:18:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "56696e206973206d616c666f726d6174746564",
                        "id": 15121,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13114:21:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_368502b0bdc8885c3e3b3ecead53d3b1bdb3a2da2f910f3346449c36bb2964b4",
                          "typeString": "literal_string \"Vin is malformatted\""
                        },
                        "value": "Vin is malformatted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_368502b0bdc8885c3e3b3ecead53d3b1bdb3a2da2f910f3346449c36bb2964b4",
                          "typeString": "literal_string \"Vin is malformatted\""
                        }
                      ],
                      "id": 15117,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "13086:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13086:50:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15123,
                  "nodeType": "ExpressionStatement",
                  "src": "13086:50:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 15125,
                            "name": "_vout",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15110,
                            "src": "13154:5:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 15126,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validateVout",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12866,
                          "src": "13154:18:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (bool)"
                          }
                        },
                        "id": 15127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13154:20:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "566f7574206973206d616c666f726d6174746564",
                        "id": 15128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13176:22:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c3efc01983c8f3c86dfaf00a9c89a4283796d35fc4887b102fe102d3e6bfeb1",
                          "typeString": "literal_string \"Vout is malformatted\""
                        },
                        "value": "Vout is malformatted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5c3efc01983c8f3c86dfaf00a9c89a4283796d35fc4887b102fe102d3e6bfeb1",
                          "typeString": "literal_string \"Vout is malformatted\""
                        }
                      ],
                      "id": 15124,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "13146:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15129,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13146:53:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15130,
                  "nodeType": "ExpressionStatement",
                  "src": "13146:53:54"
                },
                {
                  "assignments": [
                    15132
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15132,
                      "name": "_inputIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 15275,
                      "src": "13210:17:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 15131,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "13210:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15138,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 15136,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 15134,
                          "name": "_reqIndices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15106,
                          "src": "13236:11:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "38",
                          "id": 15135,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13251:1:54",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_8_by_1",
                            "typeString": "int_const 8"
                          },
                          "value": "8"
                        },
                        "src": "13236:16:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 15133,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "13230:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint8_$",
                        "typeString": "type(uint8)"
                      },
                      "typeName": "uint8"
                    },
                    "id": 15137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13230:23:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13210:43:54"
                },
                {
                  "assignments": [
                    15140
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15140,
                      "name": "_outputIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 15275,
                      "src": "13263:18:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 15139,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "13263:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15146,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 15144,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 15142,
                          "name": "_reqIndices",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15106,
                          "src": "13290:11:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30786666",
                          "id": 15143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13304:4:54",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_255_by_1",
                            "typeString": "int_const 255"
                          },
                          "value": "0xff"
                        },
                        "src": "13290:18:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 15141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "13284:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint8_$",
                        "typeString": "type(uint8)"
                      },
                      "typeName": "uint8"
                    },
                    "id": 15145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13284:25:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13263:46:54"
                },
                {
                  "assignments": [
                    15148
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15148,
                      "name": "_req",
                      "nodeType": "VariableDeclaration",
                      "scope": 15275,
                      "src": "13320:25:54",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                        "typeString": "struct OnDemandSPV.ProofRequest"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 15147,
                        "name": "ProofRequest",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 14438,
                        "src": "13320:12:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                          "typeString": "struct OnDemandSPV.ProofRequest"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15152,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 15149,
                      "name": "requests",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14450,
                      "src": "13348:8:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_ProofRequest_$14438_storage_$",
                        "typeString": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)"
                      }
                    },
                    "id": 15151,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 15150,
                      "name": "_requestID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15112,
                      "src": "13357:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13348:20:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProofRequest_$14438_storage",
                      "typeString": "struct OnDemandSPV.ProofRequest storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13320:48:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 15158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 15154,
                            "name": "_req",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15148,
                            "src": "13386:4:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                              "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                            }
                          },
                          "id": 15155,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "notBefore",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14427,
                          "src": "13386:14:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 15156,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18350,
                            "src": "13404:5:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 15157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13404:15:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13386:33:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "52657175657374206973207375626d697474656420746f6f206561726c79",
                        "id": 15159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13421:32:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4681a2b6bed9dce5e1f9da73c2cd68d707964f85a37a294c9704decdbee020d9",
                          "typeString": "literal_string \"Request is submitted too early\""
                        },
                        "value": "Request is submitted too early"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4681a2b6bed9dce5e1f9da73c2cd68d707964f85a37a294c9704decdbee020d9",
                          "typeString": "literal_string \"Request is submitted too early\""
                        }
                      ],
                      "id": 15153,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "13378:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13378:76:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15161,
                  "nodeType": "ExpressionStatement",
                  "src": "13378:76:54"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_RequestStates_$14442",
                          "typeString": "enum OnDemandSPV.RequestStates"
                        },
                        "id": 15167,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 15163,
                            "name": "_req",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15148,
                            "src": "13472:4:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                              "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                            }
                          },
                          "id": 15164,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "state",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14437,
                          "src": "13472:10:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_RequestStates_$14442",
                            "typeString": "enum OnDemandSPV.RequestStates"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 15165,
                            "name": "RequestStates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14442,
                            "src": "13486:13:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_RequestStates_$14442_$",
                              "typeString": "type(enum OnDemandSPV.RequestStates)"
                            }
                          },
                          "id": 15166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "ACTIVE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13486:20:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_RequestStates_$14442",
                            "typeString": "enum OnDemandSPV.RequestStates"
                          }
                        },
                        "src": "13472:34:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "52657175657374206973206e6f7420616374697665",
                        "id": 15168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13508:23:54",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a7f3e5190e1922621b294267d5be3f9ca011d8ae80c8e36b72a53eb1687df322",
                          "typeString": "literal_string \"Request is not active\""
                        },
                        "value": "Request is not active"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a7f3e5190e1922621b294267d5be3f9ca011d8ae80c8e36b72a53eb1687df322",
                          "typeString": "literal_string \"Request is not active\""
                        }
                      ],
                      "id": 15162,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "13464:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13464:68:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15170,
                  "nodeType": "ExpressionStatement",
                  "src": "13464:68:54"
                },
                {
                  "assignments": [
                    15172
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15172,
                      "name": "_pays",
                      "nodeType": "VariableDeclaration",
                      "scope": 15275,
                      "src": "13543:13:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 15171,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13543:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15175,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 15173,
                      "name": "_req",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15148,
                      "src": "13559:4:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                        "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                      }
                    },
                    "id": 15174,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "pays",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14425,
                    "src": "13559:9:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13543:25:54"
                },
                {
                  "assignments": [
                    15177
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15177,
                      "name": "_hasPays",
                      "nodeType": "VariableDeclaration",
                      "scope": 15275,
                      "src": "13578:13:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 15176,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13578:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15183,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 15182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 15178,
                      "name": "_pays",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15172,
                      "src": "13594:5:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 15180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13611:1:54",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 15179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "13603:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": "bytes32"
                      },
                      "id": 15181,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13603:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13594:19:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13578:35:54"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 15184,
                    "name": "_hasPays",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15177,
                    "src": "13627:8:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 15233,
                  "nodeType": "IfStatement",
                  "src": "13623:503:54",
                  "trueBody": {
                    "id": 15232,
                    "nodeType": "Block",
                    "src": "13637:489:54",
                    "statements": [
                      {
                        "assignments": [
                          15186
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 15186,
                            "name": "_out",
                            "nodeType": "VariableDeclaration",
                            "scope": 15232,
                            "src": "13651:17:54",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 15185,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "13651:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 15193,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 15190,
                                  "name": "_outputIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15140,
                                  "src": "13704:12:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "id": 15189,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13698:5:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint8_$",
                                  "typeString": "type(uint8)"
                                },
                                "typeName": "uint8"
                              },
                              "id": 15191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13698:19:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 15187,
                              "name": "_vout",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15110,
                              "src": "13671:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 15188,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "extractOutputAtIndex",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 12456,
                            "src": "13671:26:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256) pure returns (bytes memory)"
                            }
                          },
                          "id": 15192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13671:47:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13651:67:54"
                      },
                      {
                        "assignments": [
                          15195
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 15195,
                            "name": "_scriptPubkey",
                            "nodeType": "VariableDeclaration",
                            "scope": 15232,
                            "src": "13732:26:54",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 15194,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "13732:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 15204,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "38",
                              "id": 15198,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13772:1:54",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              "value": "8"
                            },
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 15202,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 15199,
                                  "name": "_out",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15186,
                                  "src": "13775:4:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 15200,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "13775:11:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "38",
                                "id": 15201,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13789:1:54",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                "value": "8"
                              },
                              "src": "13775:15:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_8_by_1",
                                "typeString": "int_const 8"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 15196,
                              "name": "_out",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15186,
                              "src": "13761:4:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 15197,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "slice",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13281,
                            "src": "13761:10:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                            }
                          },
                          "id": 15203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13761:30:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13732:59:54"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 15210,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 15207,
                                    "name": "_scriptPubkey",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15195,
                                    "src": "13840:13:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 15206,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18354,
                                  "src": "13830:9:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 15208,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13830:24:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 15209,
                                "name": "_pays",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15172,
                                "src": "13858:5:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "13830:33:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "446f6573206e6f74206d6174636820706179732072657175657374",
                              "id": 15211,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13881:29:54",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_38568893899af0ebd2b4e99be2370ce29b9bbd1e5a0c16a3c556aec2aca6a092",
                                "typeString": "literal_string \"Does not match pays request\""
                              },
                              "value": "Does not match pays request"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_38568893899af0ebd2b4e99be2370ce29b9bbd1e5a0c16a3c556aec2aca6a092",
                                "typeString": "literal_string \"Does not match pays request\""
                              }
                            ],
                            "id": 15205,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              18363,
                              18364
                            ],
                            "referencedDeclaration": 18364,
                            "src": "13805:7:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 15212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13805:106:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 15213,
                        "nodeType": "ExpressionStatement",
                        "src": "13805:106:54"
                      },
                      {
                        "assignments": [
                          15215
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 15215,
                            "name": "_paysValue",
                            "nodeType": "VariableDeclaration",
                            "scope": 15232,
                            "src": "13925:17:54",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "typeName": {
                              "id": 15214,
                              "name": "uint64",
                              "nodeType": "ElementaryTypeName",
                              "src": "13925:6:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 15218,
                        "initialValue": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 15216,
                            "name": "_req",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15148,
                            "src": "13945:4:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                              "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                            }
                          },
                          "id": 15217,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "paysValue",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14431,
                          "src": "13945:14:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13925:34:54"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 15228,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                "id": 15222,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 15220,
                                  "name": "_paysValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15215,
                                  "src": "13998:10:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 15221,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14012:1:54",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "13998:15:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                "id": 15227,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 15223,
                                      "name": "_out",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 15186,
                                      "src": "14033:4:54",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 15224,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "extractValue",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 12496,
                                    "src": "14033:17:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint64_$bound_to$_t_bytes_memory_ptr_$",
                                      "typeString": "function (bytes memory) pure returns (uint64)"
                                    }
                                  },
                                  "id": 15225,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14033:19:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 15226,
                                  "name": "_paysValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15215,
                                  "src": "14056:10:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "src": "14033:33:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "13998:68:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "446f6573206e6f74206d617463682076616c75652072657175657374",
                              "id": 15229,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14084:30:54",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_68e872e17e1b2ae77a5e85bcfdebe12738d15e5123d2d99d39f2db7440122c76",
                                "typeString": "literal_string \"Does not match value request\""
                              },
                              "value": "Does not match value request"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_68e872e17e1b2ae77a5e85bcfdebe12738d15e5123d2d99d39f2db7440122c76",
                                "typeString": "literal_string \"Does not match value request\""
                              }
                            ],
                            "id": 15219,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              18363,
                              18364
                            ],
                            "referencedDeclaration": 18364,
                            "src": "13973:7:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 15230,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13973:142:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 15231,
                        "nodeType": "ExpressionStatement",
                        "src": "13973:142:54"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    15235
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15235,
                      "name": "_spends",
                      "nodeType": "VariableDeclaration",
                      "scope": 15275,
                      "src": "14136:15:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 15234,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "14136:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15238,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 15236,
                      "name": "_req",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15148,
                      "src": "14154:4:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ProofRequest_$14438_storage_ptr",
                        "typeString": "struct OnDemandSPV.ProofRequest storage pointer"
                      }
                    },
                    "id": 15237,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "spends",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14423,
                    "src": "14154:11:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14136:29:54"
                },
                {
                  "assignments": [
                    15240
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15240,
                      "name": "_hasSpends",
                      "nodeType": "VariableDeclaration",
                      "scope": 15275,
                      "src": "14175:15:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 15239,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14175:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 15246,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 15245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 15241,
                      "name": "_spends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15235,
                      "src": "14193:7:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 15243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14212:1:54",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 15242,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14204:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": "bytes32"
                      },
                      "id": 15244,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14204:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "14193:21:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14175:39:54"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 15247,
                    "name": "_hasSpends",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15240,
                    "src": "14228:10:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 15272,
                  "nodeType": "IfStatement",
                  "src": "14224:267:54",
                  "trueBody": {
                    "id": 15271,
                    "nodeType": "Block",
                    "src": "14240:251:54",
                    "statements": [
                      {
                        "assignments": [
                          15249
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 15249,
                            "name": "_in",
                            "nodeType": "VariableDeclaration",
                            "scope": 15271,
                            "src": "14254:16:54",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 15248,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "14254:5:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 15256,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 15253,
                                  "name": "_inputIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15132,
                                  "src": "14304:11:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "id": 15252,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14298:5:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint8_$",
                                  "typeString": "type(uint8)"
                                },
                                "typeName": "uint8"
                              },
                              "id": 15254,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14298:18:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 15250,
                              "name": "_vin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15108,
                              "src": "14273:4:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 15251,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "extractInputAtIndex",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11983,
                            "src": "14273:24:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,uint256) pure returns (bytes memory)"
                            }
                          },
                          "id": 15255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14273:44:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14254:63:54"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 15267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 15259,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "!",
                                "prefix": true,
                                "src": "14356:11:54",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 15258,
                                  "name": "_hasSpends",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15240,
                                  "src": "14357:10:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 15266,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 15261,
                                          "name": "_in",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 15249,
                                          "src": "14397:3:54",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 15262,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "extractOutpoint",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 12249,
                                        "src": "14397:19:54",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                          "typeString": "function (bytes memory) pure returns (bytes memory)"
                                        }
                                      },
                                      "id": 15263,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "14397:21:54",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 15260,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18354,
                                    "src": "14387:9:54",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 15264,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14387:32:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 15265,
                                  "name": "_spends",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15235,
                                  "src": "14423:7:54",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "14387:43:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "14356:74:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "446f6573206e6f74206d61746368207370656e64732072657175657374",
                              "id": 15268,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14448:31:54",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f77100d9a9cb9d9aa9777714d55a8a2246b7105057d341ff2e5e0db7ffaa59bf",
                                "typeString": "literal_string \"Does not match spends request\""
                              },
                              "value": "Does not match spends request"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f77100d9a9cb9d9aa9777714d55a8a2246b7105057d341ff2e5e0db7ffaa59bf",
                                "typeString": "literal_string \"Does not match spends request\""
                              }
                            ],
                            "id": 15257,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              18363,
                              18364
                            ],
                            "referencedDeclaration": 18364,
                            "src": "14331:7:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 15269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14331:149:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 15270,
                        "nodeType": "ExpressionStatement",
                        "src": "14331:149:54"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 15273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14507:4:54",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 15116,
                  "id": 15274,
                  "nodeType": "Return",
                  "src": "14500:11:54"
                }
              ]
            },
            "documentation": "@notice                 Verifies that a tx meets the requester's request\n @dev                    Requests can be specify an input, and output, and/or an output value\n @param  _reqIndices  The input and output index to check against the request, packed\n @param  _vin            The tx input vector\n @param  _vout           The tx output vector\n @param  _requestID       The id of the request to check",
            "id": 15276,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkRequests",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15106,
                  "name": "_reqIndices",
                  "nodeType": "VariableDeclaration",
                  "scope": 15276,
                  "src": "12939:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 15105,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "12939:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15108,
                  "name": "_vin",
                  "nodeType": "VariableDeclaration",
                  "scope": 15276,
                  "src": "12967:17:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 15107,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12967:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15110,
                  "name": "_vout",
                  "nodeType": "VariableDeclaration",
                  "scope": 15276,
                  "src": "12994:18:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 15109,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12994:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15112,
                  "name": "_requestID",
                  "nodeType": "VariableDeclaration",
                  "scope": 15276,
                  "src": "13022:18:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15111,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13022:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12929:117:54"
            },
            "returnParameters": {
              "id": 15116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15115,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 15276,
                  "src": "13070:4:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 15114,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13070:4:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13069:6:54"
            },
            "scope": 15277,
            "src": "12905:1613:54",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 15278,
        "src": "504:14016:54"
      }
    ],
    "src": "0:14521:54"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "@summa-tx/relay-sol/contracts/OnDemandSPV.sol",
      "exportedSymbols": {
        "OnDemandSPV": [
          15277
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.5",
            ".10"
          ]
        },
        "id": 14395,
        "name": "PragmaDirective",
        "src": "0:24:54"
      },
      {
        "attributes": {
          "SourceUnit": 16401,
          "absolutePath": "@summa-tx/relay-sol/contracts/Relay.sol",
          "file": "./Relay.sol",
          "scope": 15278,
          "symbolAliases": [
            {
              "foreign": 14396,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 14397,
        "name": "ImportDirective",
        "src": "94:34:54"
      },
      {
        "attributes": {
          "SourceUnit": 14394,
          "absolutePath": "@summa-tx/relay-sol/contracts/Interfaces.sol",
          "file": "./Interfaces.sol",
          "scope": 15278,
          "symbolAliases": [
            {
              "foreign": 14398,
              "local": null
            },
            {
              "foreign": 14399,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 14400,
        "name": "ImportDirective",
        "src": "129:66:54"
      },
      {
        "attributes": {
          "SourceUnit": 13433,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
          "file": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
          "scope": 15278,
          "symbolAliases": [
            {
              "foreign": 14401,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 14402,
        "name": "ImportDirective",
        "src": "196:74:54"
      },
      {
        "attributes": {
          "SourceUnit": 13217,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
          "file": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
          "scope": 15278,
          "symbolAliases": [
            {
              "foreign": 14403,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 14404,
        "name": "ImportDirective",
        "src": "271:74:54"
      },
      {
        "attributes": {
          "SourceUnit": 14208,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
          "file": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
          "scope": 15278,
          "symbolAliases": [
            {
              "foreign": 14405,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 14406,
        "name": "ImportDirective",
        "src": "346:80:54"
      },
      {
        "attributes": {
          "SourceUnit": 13922,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol",
          "file": "@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol",
          "scope": 15278,
          "symbolAliases": [
            {
              "foreign": 14407,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 14408,
        "name": "ImportDirective",
        "src": "427:74:54"
      },
      {
        "attributes": {
          "contractDependencies": [
            14293,
            14393,
            16343
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            15277,
            16343,
            14393,
            14293
          ],
          "name": "OnDemandSPV",
          "scope": 15278
        },
        "children": [
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ISPVRequestManager",
                  "referencedDeclaration": 14293,
                  "type": "contract ISPVRequestManager"
                },
                "id": 14409,
                "name": "UserDefinedTypeName",
                "src": "528:18:54"
              }
            ],
            "id": 14410,
            "name": "InheritanceSpecifier",
            "src": "528:18:54"
          },
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "Relay",
                  "referencedDeclaration": 16343,
                  "type": "contract Relay"
                },
                "id": 14411,
                "name": "UserDefinedTypeName",
                "src": "548:5:54"
              }
            ],
            "id": 14412,
            "name": "InheritanceSpecifier",
            "src": "548:5:54"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeMath",
                  "referencedDeclaration": 13921,
                  "type": "library SafeMath"
                },
                "id": 14413,
                "name": "UserDefinedTypeName",
                "src": "566:8:54"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 14414,
                "name": "ElementaryTypeName",
                "src": "579:7:54"
              }
            ],
            "id": 14415,
            "name": "UsingForDirective",
            "src": "560:27:54"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "BytesLib",
                  "referencedDeclaration": 13432,
                  "type": "library BytesLib"
                },
                "id": 14416,
                "name": "UserDefinedTypeName",
                "src": "598:8:54"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 14417,
                "name": "ElementaryTypeName",
                "src": "611:5:54"
              }
            ],
            "id": 14418,
            "name": "UsingForDirective",
            "src": "592:25:54"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "BTCUtils",
                  "referencedDeclaration": 13216,
                  "type": "library BTCUtils"
                },
                "id": 14419,
                "name": "UserDefinedTypeName",
                "src": "628:8:54"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 14420,
                "name": "ElementaryTypeName",
                "src": "641:5:54"
              }
            ],
            "id": 14421,
            "name": "UsingForDirective",
            "src": "622:25:54"
          },
          {
            "attributes": {
              "canonicalName": "OnDemandSPV.ProofRequest",
              "name": "ProofRequest",
              "scope": 15277,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "spends",
                  "scope": 14438,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bytes32",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 14422,
                    "name": "ElementaryTypeName",
                    "src": "683:7:54"
                  }
                ],
                "id": 14423,
                "name": "VariableDeclaration",
                "src": "683:14:54"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "pays",
                  "scope": 14438,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bytes32",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 14424,
                    "name": "ElementaryTypeName",
                    "src": "707:7:54"
                  }
                ],
                "id": 14425,
                "name": "VariableDeclaration",
                "src": "707:12:54"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "notBefore",
                  "scope": 14438,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 14426,
                    "name": "ElementaryTypeName",
                    "src": "729:7:54"
                  }
                ],
                "id": 14427,
                "name": "VariableDeclaration",
                "src": "729:17:54"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "consumer",
                  "scope": 14438,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "nonpayable",
                      "type": "address"
                    },
                    "id": 14428,
                    "name": "ElementaryTypeName",
                    "src": "756:7:54"
                  }
                ],
                "id": 14429,
                "name": "VariableDeclaration",
                "src": "756:16:54"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "paysValue",
                  "scope": 14438,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint64",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint64",
                      "type": "uint64"
                    },
                    "id": 14430,
                    "name": "ElementaryTypeName",
                    "src": "782:6:54"
                  }
                ],
                "id": 14431,
                "name": "VariableDeclaration",
                "src": "782:16:54"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "numConfs",
                  "scope": 14438,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint8",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint8",
                      "type": "uint8"
                    },
                    "id": 14432,
                    "name": "ElementaryTypeName",
                    "src": "808:5:54"
                  }
                ],
                "id": 14433,
                "name": "VariableDeclaration",
                "src": "808:14:54"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "owner",
                  "scope": 14438,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "nonpayable",
                      "type": "address"
                    },
                    "id": 14434,
                    "name": "ElementaryTypeName",
                    "src": "832:7:54"
                  }
                ],
                "id": 14435,
                "name": "VariableDeclaration",
                "src": "832:13:54"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "state",
                  "scope": 14438,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "enum OnDemandSPV.RequestStates",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "RequestStates",
                      "referencedDeclaration": 14442,
                      "type": "enum OnDemandSPV.RequestStates"
                    },
                    "id": 14436,
                    "name": "UserDefinedTypeName",
                    "src": "855:13:54"
                  }
                ],
                "id": 14437,
                "name": "VariableDeclaration",
                "src": "855:19:54"
              }
            ],
            "id": 14438,
            "name": "StructDefinition",
            "src": "653:228:54"
          },
          {
            "attributes": {
              "canonicalName": "OnDemandSPV.RequestStates",
              "name": "RequestStates"
            },
            "children": [
              {
                "attributes": {
                  "name": "NONE"
                },
                "id": 14439,
                "name": "EnumValue",
                "src": "908:4:54"
              },
              {
                "attributes": {
                  "name": "ACTIVE"
                },
                "id": 14440,
                "name": "EnumValue",
                "src": "914:6:54"
              },
              {
                "attributes": {
                  "name": "CLOSED"
                },
                "id": 14441,
                "name": "EnumValue",
                "src": "922:6:54"
              }
            ],
            "id": 14442,
            "name": "EnumDefinition",
            "src": "887:43:54"
          },
          {
            "attributes": {
              "constant": false,
              "name": "validatedTxns",
              "scope": 15277,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(bytes32 => bool)",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(bytes32 => bool)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 14443,
                    "name": "ElementaryTypeName",
                    "src": "944:7:54"
                  },
                  {
                    "attributes": {
                      "name": "bool",
                      "type": "bool"
                    },
                    "id": 14444,
                    "name": "ElementaryTypeName",
                    "src": "955:4:54"
                  }
                ],
                "id": 14445,
                "name": "Mapping",
                "src": "935:25:54"
              }
            ],
            "id": 14446,
            "name": "VariableDeclaration",
            "src": "935:48:54"
          },
          {
            "attributes": {
              "constant": false,
              "name": "requests",
              "scope": 15277,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(uint256 => struct OnDemandSPV.ProofRequest)",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(uint256 => struct OnDemandSPV.ProofRequest)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 14447,
                    "name": "ElementaryTypeName",
                    "src": "1025:7:54"
                  },
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "ProofRequest",
                      "referencedDeclaration": 14438,
                      "type": "struct OnDemandSPV.ProofRequest"
                    },
                    "id": 14448,
                    "name": "UserDefinedTypeName",
                    "src": "1036:12:54"
                  }
                ],
                "id": 14449,
                "name": "Mapping",
                "src": "1016:33:54"
              }
            ],
            "id": 14450,
            "name": "VariableDeclaration",
            "src": "1016:51:54"
          },
          {
            "attributes": {
              "constant": true,
              "name": "BASE_COST",
              "scope": 15277,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 14451,
                "name": "ElementaryTypeName",
                "src": "1090:7:54"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "commonType": {
                    "typeIdentifier": "t_rational_86400_by_1",
                    "typeString": "int_const 86400"
                  },
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "operator": "*",
                  "type": "int_const 86400"
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_rational_1440_by_1",
                        "typeString": "int_const 1440"
                      },
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "operator": "*",
                      "type": "int_const 1440"
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "3234",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 24",
                          "value": "24"
                        },
                        "id": 14452,
                        "name": "Literal",
                        "src": "1126:2:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "3630",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 60",
                          "value": "60"
                        },
                        "id": 14453,
                        "name": "Literal",
                        "src": "1131:2:54"
                      }
                    ],
                    "id": 14454,
                    "name": "BinaryOperation",
                    "src": "1126:7:54"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "3630",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "number",
                      "type": "int_const 60",
                      "value": "60"
                    },
                    "id": 14455,
                    "name": "Literal",
                    "src": "1136:2:54"
                  }
                ],
                "id": 14456,
                "name": "BinaryOperation",
                "src": "1126:12:54"
              }
            ],
            "id": 14457,
            "name": "VariableDeclaration",
            "src": "1090:48:54"
          },
          {
            "attributes": {
              "constant": false,
              "name": "nextID",
              "scope": 15277,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 14458,
                "name": "ElementaryTypeName",
                "src": "1155:7:54"
              }
            ],
            "id": 14459,
            "name": "VariableDeclaration",
            "src": "1155:21:54"
          },
          {
            "attributes": {
              "constant": false,
              "name": "latestValidatedTx",
              "scope": 15277,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes32",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes32",
                  "type": "bytes32"
                },
                "id": 14460,
                "name": "ElementaryTypeName",
                "src": "1182:7:54"
              }
            ],
            "id": 14461,
            "name": "VariableDeclaration",
            "src": "1182:32:54"
          },
          {
            "attributes": {
              "constant": false,
              "name": "remoteGasAllowance",
              "scope": 15277,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 14462,
                "name": "ElementaryTypeName",
                "src": "1220:7:54"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "353030303030",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 500000",
                  "value": "500000"
                },
                "id": 14463,
                "name": "Literal",
                "src": "1256:6:54"
              }
            ],
            "id": 14464,
            "name": "VariableDeclaration",
            "src": "1220:42:54"
          },
          {
            "attributes": {
              "documentation": "@notice                   Gives a starting point for the relay\n @dev                      We don't check this AT ALL really. Don't use relays with bad genesis\n @param  _genesisHeader    The starting header\n @param  _height           The starting height\n @param  _periodStart      The hash of the first header in the genesis epoch",
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "scope": 15277,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_genesisHeader",
                      "scope": 14485,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 14465,
                        "name": "ElementaryTypeName",
                        "src": "1689:5:54"
                      }
                    ],
                    "id": 14466,
                    "name": "VariableDeclaration",
                    "src": "1689:27:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_height",
                      "scope": 14485,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14467,
                        "name": "ElementaryTypeName",
                        "src": "1726:7:54"
                      }
                    ],
                    "id": 14468,
                    "name": "VariableDeclaration",
                    "src": "1726:15:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_periodStart",
                      "scope": 14485,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 14469,
                        "name": "ElementaryTypeName",
                        "src": "1751:7:54"
                      }
                    ],
                    "id": 14470,
                    "name": "VariableDeclaration",
                    "src": "1751:20:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_firstID",
                      "scope": 14485,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14471,
                        "name": "ElementaryTypeName",
                        "src": "1781:7:54"
                      }
                    ],
                    "id": 14472,
                    "name": "VariableDeclaration",
                    "src": "1781:16:54"
                  }
                ],
                "id": 14473,
                "name": "ParameterList",
                "src": "1679:124:54"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 14479,
                "name": "ParameterList",
                "src": "1886:0:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 16343,
                      "type": "type(contract Relay)",
                      "value": "Relay"
                    },
                    "id": 14474,
                    "name": "Identifier",
                    "src": "1804:5:54"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 14466,
                      "type": "bytes memory",
                      "value": "_genesisHeader"
                    },
                    "id": 14475,
                    "name": "Identifier",
                    "src": "1819:14:54"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 14468,
                      "type": "uint256",
                      "value": "_height"
                    },
                    "id": 14476,
                    "name": "Identifier",
                    "src": "1843:7:54"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 14470,
                      "type": "bytes32",
                      "value": "_periodStart"
                    },
                    "id": 14477,
                    "name": "Identifier",
                    "src": "1860:12:54"
                  }
                ],
                "id": 14478,
                "name": "ModifierInvocation",
                "src": "1804:74:54"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14459,
                              "type": "uint256",
                              "value": "nextID"
                            },
                            "id": 14480,
                            "name": "Identifier",
                            "src": "1896:6:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14472,
                              "type": "uint256",
                              "value": "_firstID"
                            },
                            "id": 14481,
                            "name": "Identifier",
                            "src": "1905:8:54"
                          }
                        ],
                        "id": 14482,
                        "name": "Assignment",
                        "src": "1896:17:54"
                      }
                    ],
                    "id": 14483,
                    "name": "ExpressionStatement",
                    "src": "1896:17:54"
                  }
                ],
                "id": 14484,
                "name": "Block",
                "src": "1886:34:54"
              }
            ],
            "id": 14485,
            "name": "FunctionDefinition",
            "src": "1668:252:54"
          },
          {
            "attributes": {
              "documentation": "@notice                 Cancel a bitcoin event request.\n @dev                    Prevents the relay from forwarding tx infromation\n @param  _requestID      The ID of the request to be cancelled\n @return                 True if succesful, error otherwise",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "cancelRequest",
              "scope": 15277,
              "stateMutability": "nonpayable",
              "superFunction": 14271,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_requestID",
                      "scope": 14536,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14486,
                        "name": "ElementaryTypeName",
                        "src": "2232:7:54"
                      }
                    ],
                    "id": 14487,
                    "name": "VariableDeclaration",
                    "src": "2232:18:54"
                  }
                ],
                "id": 14488,
                "name": "ParameterList",
                "src": "2231:20:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 14536,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 14489,
                        "name": "ElementaryTypeName",
                        "src": "2270:4:54"
                      }
                    ],
                    "id": 14490,
                    "name": "VariableDeclaration",
                    "src": "2270:4:54"
                  }
                ],
                "id": 14491,
                "name": "ParameterList",
                "src": "2269:6:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        14493
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_req",
                          "scope": 14535,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct OnDemandSPV.ProofRequest",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ProofRequest",
                              "referencedDeclaration": 14438,
                              "type": "struct OnDemandSPV.ProofRequest"
                            },
                            "id": 14492,
                            "name": "UserDefinedTypeName",
                            "src": "2286:12:54"
                          }
                        ],
                        "id": 14493,
                        "name": "VariableDeclaration",
                        "src": "2286:25:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct OnDemandSPV.ProofRequest storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14450,
                              "type": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)",
                              "value": "requests"
                            },
                            "id": 14494,
                            "name": "Identifier",
                            "src": "2314:8:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14487,
                              "type": "uint256",
                              "value": "_requestID"
                            },
                            "id": 14495,
                            "name": "Identifier",
                            "src": "2323:10:54"
                          }
                        ],
                        "id": 14496,
                        "name": "IndexAccess",
                        "src": "2314:20:54"
                      }
                    ],
                    "id": 14497,
                    "name": "VariableDeclarationStatement",
                    "src": "2286:48:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_8db6659d192d7886b84695d587e39167fa2d51f8755fe7359272dc4e93c1d38f",
                                  "typeString": "literal_string \"Request not active\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 14498,
                            "name": "Identifier",
                            "src": "2344:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_RequestStates_$14442",
                                "typeString": "enum OnDemandSPV.RequestStates"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "state",
                                  "referencedDeclaration": 14437,
                                  "type": "enum OnDemandSPV.RequestStates"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14493,
                                      "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                      "value": "_req"
                                    },
                                    "id": 14499,
                                    "name": "Identifier",
                                    "src": "2352:4:54"
                                  }
                                ],
                                "id": 14500,
                                "name": "MemberAccess",
                                "src": "2352:10:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "ACTIVE",
                                  "referencedDeclaration": null,
                                  "type": "enum OnDemandSPV.RequestStates"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14442,
                                      "type": "type(enum OnDemandSPV.RequestStates)",
                                      "value": "RequestStates"
                                    },
                                    "id": 14501,
                                    "name": "Identifier",
                                    "src": "2366:13:54"
                                  }
                                ],
                                "id": 14502,
                                "name": "MemberAccess",
                                "src": "2366:20:54"
                              }
                            ],
                            "id": 14503,
                            "name": "BinaryOperation",
                            "src": "2352:34:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "52657175657374206e6f7420616374697665",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Request not active\"",
                              "value": "Request not active"
                            },
                            "id": 14504,
                            "name": "Literal",
                            "src": "2388:20:54"
                          }
                        ],
                        "id": 14505,
                        "name": "FunctionCall",
                        "src": "2344:65:54"
                      }
                    ],
                    "id": 14506,
                    "name": "ExpressionStatement",
                    "src": "2344:65:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_8c11ae7ecc9d44cd814ec878b3b1998240e091c28a8589770f1ce8f56aa2f337",
                                  "typeString": "literal_string \"Can only be cancelled by owner or consumer\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 14507,
                            "name": "Identifier",
                            "src": "2419:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "sender",
                                      "referencedDeclaration": null,
                                      "type": "address payable"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18360,
                                          "type": "msg",
                                          "value": "msg"
                                        },
                                        "id": 14508,
                                        "name": "Identifier",
                                        "src": "2427:3:54"
                                      }
                                    ],
                                    "id": 14509,
                                    "name": "MemberAccess",
                                    "src": "2427:10:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "consumer",
                                      "referencedDeclaration": 14429,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14493,
                                          "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                          "value": "_req"
                                        },
                                        "id": 14510,
                                        "name": "Identifier",
                                        "src": "2441:4:54"
                                      }
                                    ],
                                    "id": 14511,
                                    "name": "MemberAccess",
                                    "src": "2441:13:54"
                                  }
                                ],
                                "id": 14512,
                                "name": "BinaryOperation",
                                "src": "2427:27:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "sender",
                                      "referencedDeclaration": null,
                                      "type": "address payable"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18360,
                                          "type": "msg",
                                          "value": "msg"
                                        },
                                        "id": 14513,
                                        "name": "Identifier",
                                        "src": "2458:3:54"
                                      }
                                    ],
                                    "id": 14514,
                                    "name": "MemberAccess",
                                    "src": "2458:10:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "owner",
                                      "referencedDeclaration": 14435,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14493,
                                          "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                          "value": "_req"
                                        },
                                        "id": 14515,
                                        "name": "Identifier",
                                        "src": "2472:4:54"
                                      }
                                    ],
                                    "id": 14516,
                                    "name": "MemberAccess",
                                    "src": "2472:10:54"
                                  }
                                ],
                                "id": 14517,
                                "name": "BinaryOperation",
                                "src": "2458:24:54"
                              }
                            ],
                            "id": 14518,
                            "name": "BinaryOperation",
                            "src": "2427:55:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "43616e206f6e6c792062652063616e63656c6c6564206279206f776e6572206f7220636f6e73756d6572",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Can only be cancelled by owner or consumer\"",
                              "value": "Can only be cancelled by owner or consumer"
                            },
                            "id": 14519,
                            "name": "Literal",
                            "src": "2484:44:54"
                          }
                        ],
                        "id": 14520,
                        "name": "FunctionCall",
                        "src": "2419:110:54"
                      }
                    ],
                    "id": 14521,
                    "name": "ExpressionStatement",
                    "src": "2419:110:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "enum OnDemandSPV.RequestStates"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "state",
                              "referencedDeclaration": 14437,
                              "type": "enum OnDemandSPV.RequestStates"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14493,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14522,
                                "name": "Identifier",
                                "src": "2539:4:54"
                              }
                            ],
                            "id": 14524,
                            "name": "MemberAccess",
                            "src": "2539:10:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "CLOSED",
                              "referencedDeclaration": null,
                              "type": "enum OnDemandSPV.RequestStates"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14442,
                                  "type": "type(enum OnDemandSPV.RequestStates)",
                                  "value": "RequestStates"
                                },
                                "id": 14525,
                                "name": "Identifier",
                                "src": "2552:13:54"
                              }
                            ],
                            "id": 14526,
                            "name": "MemberAccess",
                            "src": "2552:20:54"
                          }
                        ],
                        "id": 14527,
                        "name": "Assignment",
                        "src": "2539:33:54"
                      }
                    ],
                    "id": 14528,
                    "name": "ExpressionStatement",
                    "src": "2539:33:54"
                  },
                  {
                    "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"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14241,
                              "type": "function (uint256)",
                              "value": "RequestClosed"
                            },
                            "id": 14529,
                            "name": "Identifier",
                            "src": "2587:13:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14487,
                              "type": "uint256",
                              "value": "_requestID"
                            },
                            "id": 14530,
                            "name": "Identifier",
                            "src": "2601:10:54"
                          }
                        ],
                        "id": 14531,
                        "name": "FunctionCall",
                        "src": "2587:25:54"
                      }
                    ],
                    "id": 14532,
                    "name": "EmitStatement",
                    "src": "2582:30:54"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 14491
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 14533,
                        "name": "Literal",
                        "src": "2629:4:54"
                      }
                    ],
                    "id": 14534,
                    "name": "Return",
                    "src": "2622:11:54"
                  }
                ],
                "id": 14535,
                "name": "Block",
                "src": "2276:364:54"
              }
            ],
            "id": 14536,
            "name": "FunctionDefinition",
            "src": "2209:431:54"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getLatestValidatedTx",
              "scope": 15277,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 14537,
                "name": "ParameterList",
                "src": "2675:2:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 14544,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 14538,
                        "name": "ElementaryTypeName",
                        "src": "2701:7:54"
                      }
                    ],
                    "id": 14539,
                    "name": "VariableDeclaration",
                    "src": "2701:7:54"
                  }
                ],
                "id": 14540,
                "name": "ParameterList",
                "src": "2700:9:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 14540
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 14461,
                          "type": "bytes32",
                          "value": "latestValidatedTx"
                        },
                        "id": 14541,
                        "name": "Identifier",
                        "src": "2727:17:54"
                      }
                    ],
                    "id": 14542,
                    "name": "Return",
                    "src": "2720:24:54"
                  }
                ],
                "id": 14543,
                "name": "Block",
                "src": "2710:41:54"
              }
            ],
            "id": 14544,
            "name": "FunctionDefinition",
            "src": "2646:105:54"
          },
          {
            "attributes": {
              "documentation": "@notice             Retrieve info about a request\n @dev                Requests ids are numerical\n @param  _requestID  The numerical ID of the request\n @return             A tuple representation of the request struct",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getRequest",
              "scope": 15277,
              "stateMutability": "view",
              "superFunction": 14292,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_requestID",
                      "scope": 14614,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14545,
                        "name": "ElementaryTypeName",
                        "src": "3032:7:54"
                      }
                    ],
                    "id": 14546,
                    "name": "VariableDeclaration",
                    "src": "3032:18:54"
                  }
                ],
                "id": 14547,
                "name": "ParameterList",
                "src": "3022:34:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "spends",
                      "scope": 14614,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 14548,
                        "name": "ElementaryTypeName",
                        "src": "3089:7:54"
                      }
                    ],
                    "id": 14549,
                    "name": "VariableDeclaration",
                    "src": "3089:14:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "pays",
                      "scope": 14614,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 14550,
                        "name": "ElementaryTypeName",
                        "src": "3113:7:54"
                      }
                    ],
                    "id": 14551,
                    "name": "VariableDeclaration",
                    "src": "3113:12:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "paysValue",
                      "scope": 14614,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 14552,
                        "name": "ElementaryTypeName",
                        "src": "3135:6:54"
                      }
                    ],
                    "id": 14553,
                    "name": "VariableDeclaration",
                    "src": "3135:16:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "state",
                      "scope": 14614,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 14554,
                        "name": "ElementaryTypeName",
                        "src": "3161:5:54"
                      }
                    ],
                    "id": 14555,
                    "name": "VariableDeclaration",
                    "src": "3161:11:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "consumer",
                      "scope": 14614,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 14556,
                        "name": "ElementaryTypeName",
                        "src": "3182:7:54"
                      }
                    ],
                    "id": 14557,
                    "name": "VariableDeclaration",
                    "src": "3182:16:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "owner",
                      "scope": 14614,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 14558,
                        "name": "ElementaryTypeName",
                        "src": "3208:7:54"
                      }
                    ],
                    "id": 14559,
                    "name": "VariableDeclaration",
                    "src": "3208:13:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "numConfs",
                      "scope": 14614,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 14560,
                        "name": "ElementaryTypeName",
                        "src": "3231:5:54"
                      }
                    ],
                    "id": 14561,
                    "name": "VariableDeclaration",
                    "src": "3231:14:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "notBefore",
                      "scope": 14614,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14562,
                        "name": "ElementaryTypeName",
                        "src": "3255:7:54"
                      }
                    ],
                    "id": 14563,
                    "name": "VariableDeclaration",
                    "src": "3255:17:54"
                  }
                ],
                "id": 14564,
                "name": "ParameterList",
                "src": "3079:199:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        14566
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_req",
                          "scope": 14613,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct OnDemandSPV.ProofRequest",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ProofRequest",
                              "referencedDeclaration": 14438,
                              "type": "struct OnDemandSPV.ProofRequest"
                            },
                            "id": 14565,
                            "name": "UserDefinedTypeName",
                            "src": "3289:12:54"
                          }
                        ],
                        "id": 14566,
                        "name": "VariableDeclaration",
                        "src": "3289:25:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct OnDemandSPV.ProofRequest storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14450,
                              "type": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)",
                              "value": "requests"
                            },
                            "id": 14567,
                            "name": "Identifier",
                            "src": "3317:8:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14546,
                              "type": "uint256",
                              "value": "_requestID"
                            },
                            "id": 14568,
                            "name": "Identifier",
                            "src": "3326:10:54"
                          }
                        ],
                        "id": 14569,
                        "name": "IndexAccess",
                        "src": "3317:20:54"
                      }
                    ],
                    "id": 14570,
                    "name": "VariableDeclarationStatement",
                    "src": "3289:48:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14549,
                              "type": "bytes32",
                              "value": "spends"
                            },
                            "id": 14571,
                            "name": "Identifier",
                            "src": "3347:6:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "spends",
                              "referencedDeclaration": 14423,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14566,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14572,
                                "name": "Identifier",
                                "src": "3356:4:54"
                              }
                            ],
                            "id": 14573,
                            "name": "MemberAccess",
                            "src": "3356:11:54"
                          }
                        ],
                        "id": 14574,
                        "name": "Assignment",
                        "src": "3347:20:54"
                      }
                    ],
                    "id": 14575,
                    "name": "ExpressionStatement",
                    "src": "3347:20:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14551,
                              "type": "bytes32",
                              "value": "pays"
                            },
                            "id": 14576,
                            "name": "Identifier",
                            "src": "3377:4:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "pays",
                              "referencedDeclaration": 14425,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14566,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14577,
                                "name": "Identifier",
                                "src": "3384:4:54"
                              }
                            ],
                            "id": 14578,
                            "name": "MemberAccess",
                            "src": "3384:9:54"
                          }
                        ],
                        "id": 14579,
                        "name": "Assignment",
                        "src": "3377:16:54"
                      }
                    ],
                    "id": 14580,
                    "name": "ExpressionStatement",
                    "src": "3377:16:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14553,
                              "type": "uint64",
                              "value": "paysValue"
                            },
                            "id": 14581,
                            "name": "Identifier",
                            "src": "3403:9:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "paysValue",
                              "referencedDeclaration": 14431,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14566,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14582,
                                "name": "Identifier",
                                "src": "3415:4:54"
                              }
                            ],
                            "id": 14583,
                            "name": "MemberAccess",
                            "src": "3415:14:54"
                          }
                        ],
                        "id": 14584,
                        "name": "Assignment",
                        "src": "3403:26:54"
                      }
                    ],
                    "id": 14585,
                    "name": "ExpressionStatement",
                    "src": "3403:26:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint8"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14555,
                              "type": "uint8",
                              "value": "state"
                            },
                            "id": 14586,
                            "name": "Identifier",
                            "src": "3439:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint8",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_enum$_RequestStates_$14442",
                                      "typeString": "enum OnDemandSPV.RequestStates"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint8)",
                                  "value": "uint8"
                                },
                                "id": 14587,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3447:5:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "state",
                                  "referencedDeclaration": 14437,
                                  "type": "enum OnDemandSPV.RequestStates"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14566,
                                      "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                      "value": "_req"
                                    },
                                    "id": 14588,
                                    "name": "Identifier",
                                    "src": "3453:4:54"
                                  }
                                ],
                                "id": 14589,
                                "name": "MemberAccess",
                                "src": "3453:10:54"
                              }
                            ],
                            "id": 14590,
                            "name": "FunctionCall",
                            "src": "3447:17:54"
                          }
                        ],
                        "id": 14591,
                        "name": "Assignment",
                        "src": "3439:25:54"
                      }
                    ],
                    "id": 14592,
                    "name": "ExpressionStatement",
                    "src": "3439:25:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14557,
                              "type": "address",
                              "value": "consumer"
                            },
                            "id": 14593,
                            "name": "Identifier",
                            "src": "3474:8:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "consumer",
                              "referencedDeclaration": 14429,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14566,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14594,
                                "name": "Identifier",
                                "src": "3485:4:54"
                              }
                            ],
                            "id": 14595,
                            "name": "MemberAccess",
                            "src": "3485:13:54"
                          }
                        ],
                        "id": 14596,
                        "name": "Assignment",
                        "src": "3474:24:54"
                      }
                    ],
                    "id": 14597,
                    "name": "ExpressionStatement",
                    "src": "3474:24:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14559,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 14598,
                            "name": "Identifier",
                            "src": "3508:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "owner",
                              "referencedDeclaration": 14435,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14566,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14599,
                                "name": "Identifier",
                                "src": "3516:4:54"
                              }
                            ],
                            "id": 14600,
                            "name": "MemberAccess",
                            "src": "3516:10:54"
                          }
                        ],
                        "id": 14601,
                        "name": "Assignment",
                        "src": "3508:18:54"
                      }
                    ],
                    "id": 14602,
                    "name": "ExpressionStatement",
                    "src": "3508:18:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint8"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14561,
                              "type": "uint8",
                              "value": "numConfs"
                            },
                            "id": 14603,
                            "name": "Identifier",
                            "src": "3536:8:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "numConfs",
                              "referencedDeclaration": 14433,
                              "type": "uint8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14566,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14604,
                                "name": "Identifier",
                                "src": "3547:4:54"
                              }
                            ],
                            "id": 14605,
                            "name": "MemberAccess",
                            "src": "3547:13:54"
                          }
                        ],
                        "id": 14606,
                        "name": "Assignment",
                        "src": "3536:24:54"
                      }
                    ],
                    "id": 14607,
                    "name": "ExpressionStatement",
                    "src": "3536:24:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14563,
                              "type": "uint256",
                              "value": "notBefore"
                            },
                            "id": 14608,
                            "name": "Identifier",
                            "src": "3570:9:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "notBefore",
                              "referencedDeclaration": 14427,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14566,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14609,
                                "name": "Identifier",
                                "src": "3582:4:54"
                              }
                            ],
                            "id": 14610,
                            "name": "MemberAccess",
                            "src": "3582:14:54"
                          }
                        ],
                        "id": 14611,
                        "name": "Assignment",
                        "src": "3570:26:54"
                      }
                    ],
                    "id": 14612,
                    "name": "ExpressionStatement",
                    "src": "3570:26:54"
                  }
                ],
                "id": 14613,
                "name": "Block",
                "src": "3279:324:54"
              }
            ],
            "id": 14614,
            "name": "FunctionDefinition",
            "src": "3003:600:54"
          },
          {
            "attributes": {
              "documentation": "@notice                 Subscribe to a feed of Bitcoin txns matching a request\n @dev                    The request can be a spent utxo and/or a created utxo\n @param  _spends         An outpoint that must be spent in acceptable txns (optional)\n @param  _pays           An output script that must be paid in acceptable txns (optional)\n @param  _paysValue      A minimum value that must be paid to the output script (optional)\n @param  _consumer       The address of a ISPVConsumer exposing spv\n @param  _numConfs       The minimum number of Bitcoin confirmations to accept\n @param  _notBefore      A timestamp before which proofs are not accepted\n @return                 A unique request ID.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "request",
              "scope": 15277,
              "stateMutability": "nonpayable",
              "superFunction": 14264,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_spends",
                      "scope": 14641,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 14615,
                        "name": "ElementaryTypeName",
                        "src": "4391:5:54"
                      }
                    ],
                    "id": 14616,
                    "name": "VariableDeclaration",
                    "src": "4391:22:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_pays",
                      "scope": 14641,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 14617,
                        "name": "ElementaryTypeName",
                        "src": "4423:5:54"
                      }
                    ],
                    "id": 14618,
                    "name": "VariableDeclaration",
                    "src": "4423:20:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paysValue",
                      "scope": 14641,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 14619,
                        "name": "ElementaryTypeName",
                        "src": "4453:6:54"
                      }
                    ],
                    "id": 14620,
                    "name": "VariableDeclaration",
                    "src": "4453:17:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_consumer",
                      "scope": 14641,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 14621,
                        "name": "ElementaryTypeName",
                        "src": "4480:7:54"
                      }
                    ],
                    "id": 14622,
                    "name": "VariableDeclaration",
                    "src": "4480:17:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_numConfs",
                      "scope": 14641,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 14623,
                        "name": "ElementaryTypeName",
                        "src": "4507:5:54"
                      }
                    ],
                    "id": 14624,
                    "name": "VariableDeclaration",
                    "src": "4507:15:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_notBefore",
                      "scope": 14641,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14625,
                        "name": "ElementaryTypeName",
                        "src": "4532:7:54"
                      }
                    ],
                    "id": 14626,
                    "name": "VariableDeclaration",
                    "src": "4532:18:54"
                  }
                ],
                "id": 14627,
                "name": "ParameterList",
                "src": "4381:175:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 14641,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14628,
                        "name": "ElementaryTypeName",
                        "src": "4575:7:54"
                      }
                    ],
                    "id": 14629,
                    "name": "VariableDeclaration",
                    "src": "4575:7:54"
                  }
                ],
                "id": 14630,
                "name": "ParameterList",
                "src": "4574:9:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 14630
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14864,
                              "type": "function (bytes memory,bytes memory,uint64,address,uint8,uint256) returns (uint256)",
                              "value": "_request"
                            },
                            "id": 14631,
                            "name": "Identifier",
                            "src": "4601:8:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14616,
                              "type": "bytes calldata",
                              "value": "_spends"
                            },
                            "id": 14632,
                            "name": "Identifier",
                            "src": "4610:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14618,
                              "type": "bytes calldata",
                              "value": "_pays"
                            },
                            "id": 14633,
                            "name": "Identifier",
                            "src": "4619:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14620,
                              "type": "uint64",
                              "value": "_paysValue"
                            },
                            "id": 14634,
                            "name": "Identifier",
                            "src": "4626:10:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14622,
                              "type": "address",
                              "value": "_consumer"
                            },
                            "id": 14635,
                            "name": "Identifier",
                            "src": "4638:9:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14624,
                              "type": "uint8",
                              "value": "_numConfs"
                            },
                            "id": 14636,
                            "name": "Identifier",
                            "src": "4649:9:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14626,
                              "type": "uint256",
                              "value": "_notBefore"
                            },
                            "id": 14637,
                            "name": "Identifier",
                            "src": "4660:10:54"
                          }
                        ],
                        "id": 14638,
                        "name": "FunctionCall",
                        "src": "4601:70:54"
                      }
                    ],
                    "id": 14639,
                    "name": "Return",
                    "src": "4594:77:54"
                  }
                ],
                "id": 14640,
                "name": "Block",
                "src": "4584:94:54"
              }
            ],
            "id": 14641,
            "name": "FunctionDefinition",
            "src": "4365:313:54"
          },
          {
            "attributes": {
              "documentation": "@notice                 Subscribe to a feed of Bitcoin txns matching a request\n @dev                    The request can be a spent utxo and/or a created utxo\n @param  _spends         An outpoint that must be spent in acceptable txns (optional)\n @param  _pays           An output script that must be paid in acceptable txns (optional)\n @param  _paysValue      A minimum value that must be paid to the output script (optional)\n @param  _consumer       The address of a ISPVConsumer exposing spv\n @param  _numConfs       The minimum number of Bitcoin confirmations to accept\n @param  _notBefore      A timestamp before which proofs are not accepted\n @return                 A unique request ID",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_request",
              "scope": 15277,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_spends",
                      "scope": 14864,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 14642,
                        "name": "ElementaryTypeName",
                        "src": "5466:5:54"
                      }
                    ],
                    "id": 14643,
                    "name": "VariableDeclaration",
                    "src": "5466:20:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_pays",
                      "scope": 14864,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 14644,
                        "name": "ElementaryTypeName",
                        "src": "5496:5:54"
                      }
                    ],
                    "id": 14645,
                    "name": "VariableDeclaration",
                    "src": "5496:18:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paysValue",
                      "scope": 14864,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 14646,
                        "name": "ElementaryTypeName",
                        "src": "5524:6:54"
                      }
                    ],
                    "id": 14647,
                    "name": "VariableDeclaration",
                    "src": "5524:17:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_consumer",
                      "scope": 14864,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 14648,
                        "name": "ElementaryTypeName",
                        "src": "5551:7:54"
                      }
                    ],
                    "id": 14649,
                    "name": "VariableDeclaration",
                    "src": "5551:17:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_numConfs",
                      "scope": 14864,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 14650,
                        "name": "ElementaryTypeName",
                        "src": "5578:5:54"
                      }
                    ],
                    "id": 14651,
                    "name": "VariableDeclaration",
                    "src": "5578:15:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_notBefore",
                      "scope": 14864,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14652,
                        "name": "ElementaryTypeName",
                        "src": "5603:7:54"
                      }
                    ],
                    "id": 14653,
                    "name": "VariableDeclaration",
                    "src": "5603:18:54"
                  }
                ],
                "id": 14654,
                "name": "ParameterList",
                "src": "5456:171:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 14864,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14655,
                        "name": "ElementaryTypeName",
                        "src": "5646:7:54"
                      }
                    ],
                    "id": 14656,
                    "name": "VariableDeclaration",
                    "src": "5646:7:54"
                  }
                ],
                "id": 14657,
                "name": "ParameterList",
                "src": "5645:9:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        14659
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_requestID",
                          "scope": 14863,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 14658,
                            "name": "ElementaryTypeName",
                            "src": "5665:7:54"
                          }
                        ],
                        "id": 14659,
                        "name": "VariableDeclaration",
                        "src": "5665:18:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 14459,
                          "type": "uint256",
                          "value": "nextID"
                        },
                        "id": 14660,
                        "name": "Identifier",
                        "src": "5686:6:54"
                      }
                    ],
                    "id": 14661,
                    "name": "VariableDeclarationStatement",
                    "src": "5665:27:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14459,
                              "type": "uint256",
                              "value": "nextID"
                            },
                            "id": 14662,
                            "name": "Identifier",
                            "src": "5702:6:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "+",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14459,
                                  "type": "uint256",
                                  "value": "nextID"
                                },
                                "id": 14663,
                                "name": "Identifier",
                                "src": "5711:6:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 14664,
                                "name": "Literal",
                                "src": "5720:1:54"
                              }
                            ],
                            "id": 14665,
                            "name": "BinaryOperation",
                            "src": "5711:10:54"
                          }
                        ],
                        "id": 14666,
                        "name": "Assignment",
                        "src": "5702:19:54"
                      }
                    ],
                    "id": 14667,
                    "name": "ExpressionStatement",
                    "src": "5702:19:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        14669
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "pays",
                          "scope": 14863,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 14668,
                            "name": "ElementaryTypeName",
                            "src": "5731:5:54"
                          }
                        ],
                        "id": 14669,
                        "name": "VariableDeclaration",
                        "src": "5731:17:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 14645,
                          "type": "bytes memory",
                          "value": "_pays"
                        },
                        "id": 14670,
                        "name": "Identifier",
                        "src": "5751:5:54"
                      }
                    ],
                    "id": 14671,
                    "name": "VariableDeclarationStatement",
                    "src": "5731:25:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_e85ada8fc469dee8c135d2dda2bf5320fb23f80a44516901e07c6214cf73f8fe",
                                  "typeString": "literal_string \"Not a valid UTXO\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 14672,
                            "name": "Identifier",
                            "src": "5767:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14643,
                                          "type": "bytes memory",
                                          "value": "_spends"
                                        },
                                        "id": 14673,
                                        "name": "Identifier",
                                        "src": "5775:7:54"
                                      }
                                    ],
                                    "id": 14674,
                                    "name": "MemberAccess",
                                    "src": "5775:14:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "3336",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 36",
                                      "value": "36"
                                    },
                                    "id": 14675,
                                    "name": "Literal",
                                    "src": "5793:2:54"
                                  }
                                ],
                                "id": 14676,
                                "name": "BinaryOperation",
                                "src": "5775:20:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14643,
                                          "type": "bytes memory",
                                          "value": "_spends"
                                        },
                                        "id": 14677,
                                        "name": "Identifier",
                                        "src": "5799:7:54"
                                      }
                                    ],
                                    "id": 14678,
                                    "name": "MemberAccess",
                                    "src": "5799:14:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 14679,
                                    "name": "Literal",
                                    "src": "5817:1:54"
                                  }
                                ],
                                "id": 14680,
                                "name": "BinaryOperation",
                                "src": "5799:19:54"
                              }
                            ],
                            "id": 14681,
                            "name": "BinaryOperation",
                            "src": "5775:43:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4e6f7420612076616c6964205554584f",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Not a valid UTXO\"",
                              "value": "Not a valid UTXO"
                            },
                            "id": 14682,
                            "name": "Literal",
                            "src": "5820:18:54"
                          }
                        ],
                        "id": 14683,
                        "name": "FunctionCall",
                        "src": "5767:72:54"
                      }
                    ],
                    "id": 14684,
                    "name": "ExpressionStatement",
                    "src": "5767:72:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        14686
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_paysLen",
                          "scope": 14863,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 14685,
                            "name": "ElementaryTypeName",
                            "src": "5933:7:54"
                          }
                        ],
                        "id": 14686,
                        "name": "VariableDeclaration",
                        "src": "5933:16:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "length",
                          "referencedDeclaration": null,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14669,
                              "type": "bytes memory",
                              "value": "pays"
                            },
                            "id": 14687,
                            "name": "Identifier",
                            "src": "5952:4:54"
                          }
                        ],
                        "id": 14688,
                        "name": "MemberAccess",
                        "src": "5952:11:54"
                      }
                    ],
                    "id": 14689,
                    "name": "VariableDeclarationStatement",
                    "src": "5933:30:54"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14686,
                                  "type": "uint256",
                                  "value": "_paysLen"
                                },
                                "id": 14690,
                                "name": "Identifier",
                                "src": "6035:8:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 14691,
                                "name": "Literal",
                                "src": "6046:1:54"
                              }
                            ],
                            "id": 14692,
                            "name": "BinaryOperation",
                            "src": "6035:12:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint8",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint8)",
                                      "value": "uint8"
                                    },
                                    "id": 14693,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "6051:5:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "bytes1"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14669,
                                          "type": "bytes memory",
                                          "value": "pays"
                                        },
                                        "id": 14694,
                                        "name": "Identifier",
                                        "src": "6057:4:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 14695,
                                        "name": "Literal",
                                        "src": "6062:1:54"
                                      }
                                    ],
                                    "id": 14696,
                                    "name": "IndexAccess",
                                    "src": "6057:7:54"
                                  }
                                ],
                                "id": 14697,
                                "name": "FunctionCall",
                                "src": "6051:14:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14686,
                                      "type": "uint256",
                                      "value": "_paysLen"
                                    },
                                    "id": 14698,
                                    "name": "Identifier",
                                    "src": "6069:8:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 14699,
                                    "name": "Literal",
                                    "src": "6080:1:54"
                                  }
                                ],
                                "id": 14700,
                                "name": "BinaryOperation",
                                "src": "6069:12:54"
                              }
                            ],
                            "id": 14701,
                            "name": "BinaryOperation",
                            "src": "6051:30:54"
                          }
                        ],
                        "id": 14702,
                        "name": "BinaryOperation",
                        "src": "6035:46:54"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "bytes memory"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14669,
                                      "type": "bytes memory",
                                      "value": "pays"
                                    },
                                    "id": 14703,
                                    "name": "Identifier",
                                    "src": "6097:4:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "member_name": "encodePacked",
                                          "referencedDeclaration": null,
                                          "type": "function () pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 18347,
                                              "type": "abi",
                                              "value": "abi"
                                            },
                                            "id": 14704,
                                            "name": "Identifier",
                                            "src": "6104:3:54"
                                          }
                                        ],
                                        "id": 14705,
                                        "name": "MemberAccess",
                                        "src": "6104:16:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "uint8",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(uint8)",
                                              "value": "uint8"
                                            },
                                            "id": 14706,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "6121:5:54"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 14686,
                                              "type": "uint256",
                                              "value": "_paysLen"
                                            },
                                            "id": 14707,
                                            "name": "Identifier",
                                            "src": "6127:8:54"
                                          }
                                        ],
                                        "id": 14708,
                                        "name": "FunctionCall",
                                        "src": "6121:15:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14669,
                                          "type": "bytes memory",
                                          "value": "pays"
                                        },
                                        "id": 14709,
                                        "name": "Identifier",
                                        "src": "6138:4:54"
                                      }
                                    ],
                                    "id": 14710,
                                    "name": "FunctionCall",
                                    "src": "6104:39:54"
                                  }
                                ],
                                "id": 14711,
                                "name": "Assignment",
                                "src": "6097:46:54"
                              }
                            ],
                            "id": 14712,
                            "name": "ExpressionStatement",
                            "src": "6097:46:54"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14686,
                                      "type": "uint256",
                                      "value": "_paysLen"
                                    },
                                    "id": 14713,
                                    "name": "Identifier",
                                    "src": "6157:8:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 14714,
                                    "name": "Literal",
                                    "src": "6169:1:54"
                                  }
                                ],
                                "id": 14715,
                                "name": "Assignment",
                                "src": "6157:13:54"
                              }
                            ],
                            "id": 14716,
                            "name": "ExpressionStatement",
                            "src": "6157:13:54"
                          }
                        ],
                        "id": 14717,
                        "name": "Block",
                        "src": "6083:145:54"
                      }
                    ],
                    "id": 14718,
                    "name": "IfStatement",
                    "src": "6031:197:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        14720
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_p",
                          "scope": 14863,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 14719,
                            "name": "ElementaryTypeName",
                            "src": "6238:5:54"
                          }
                        ],
                        "id": 14720,
                        "name": "VariableDeclaration",
                        "src": "6238:15:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "encodePacked",
                              "referencedDeclaration": null,
                              "type": "function () pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18347,
                                  "type": "abi",
                                  "value": "abi"
                                },
                                "id": 14721,
                                "name": "Identifier",
                                "src": "6256:3:54"
                              }
                            ],
                            "id": 14722,
                            "name": "MemberAccess",
                            "src": "6256:16:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes8",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes8)",
                                  "value": "bytes8"
                                },
                                "id": 14723,
                                "name": "ElementaryTypeNameExpression",
                                "src": "6273:6:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 14724,
                                "name": "Literal",
                                "src": "6280:1:54"
                              }
                            ],
                            "id": 14725,
                            "name": "FunctionCall",
                            "src": "6273:9:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14669,
                              "type": "bytes memory",
                              "value": "pays"
                            },
                            "id": 14726,
                            "name": "Identifier",
                            "src": "6284:4:54"
                          }
                        ],
                        "id": 14727,
                        "name": "FunctionCall",
                        "src": "6256:33:54"
                      }
                    ],
                    "id": 14728,
                    "name": "VariableDeclarationStatement",
                    "src": "6238:51:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_9168008da2dac08ddfb43a92d860110a2cfd0c4f45bad096985566040c5cb993",
                                  "typeString": "literal_string \"Not a standard output type\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 14729,
                            "name": "Identifier",
                            "src": "6299:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "||",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "==",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14686,
                                          "type": "uint256",
                                          "value": "_paysLen"
                                        },
                                        "id": 14730,
                                        "name": "Identifier",
                                        "src": "6320:8:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 14731,
                                        "name": "Literal",
                                        "src": "6332:1:54"
                                      }
                                    ],
                                    "id": 14732,
                                    "name": "BinaryOperation",
                                    "src": "6320:13:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": ">",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "length",
                                          "referencedDeclaration": null,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                null
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "bytes memory",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    null
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "extractHash",
                                                  "referencedDeclaration": 12682,
                                                  "type": "function (bytes memory) pure returns (bytes memory)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 14720,
                                                      "type": "bytes memory",
                                                      "value": "_p"
                                                    },
                                                    "id": 14733,
                                                    "name": "Identifier",
                                                    "src": "6367:2:54"
                                                  }
                                                ],
                                                "id": 14734,
                                                "name": "MemberAccess",
                                                "src": "6367:14:54"
                                              }
                                            ],
                                            "id": 14735,
                                            "name": "FunctionCall",
                                            "src": "6367:16:54"
                                          }
                                        ],
                                        "id": 14736,
                                        "name": "MemberAccess",
                                        "src": "6367:23:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 14737,
                                        "name": "Literal",
                                        "src": "6393:1:54"
                                      }
                                    ],
                                    "id": 14738,
                                    "name": "BinaryOperation",
                                    "src": "6367:27:54"
                                  }
                                ],
                                "id": 14739,
                                "name": "BinaryOperation",
                                "src": "6320:74:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                null
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "extractOpReturnData",
                                              "referencedDeclaration": 12533,
                                              "type": "function (bytes memory) pure returns (bytes memory)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 14720,
                                                  "type": "bytes memory",
                                                  "value": "_p"
                                                },
                                                "id": 14740,
                                                "name": "Identifier",
                                                "src": "6432:2:54"
                                              }
                                            ],
                                            "id": 14741,
                                            "name": "MemberAccess",
                                            "src": "6432:22:54"
                                          }
                                        ],
                                        "id": 14742,
                                        "name": "FunctionCall",
                                        "src": "6432:24:54"
                                      }
                                    ],
                                    "id": 14743,
                                    "name": "MemberAccess",
                                    "src": "6432:31:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 14744,
                                    "name": "Literal",
                                    "src": "6466:1:54"
                                  }
                                ],
                                "id": 14745,
                                "name": "BinaryOperation",
                                "src": "6432:35:54"
                              }
                            ],
                            "id": 14746,
                            "name": "BinaryOperation",
                            "src": "6320:147:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4e6f742061207374616e64617264206f75747075742074797065",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Not a standard output type\"",
                              "value": "Not a standard output type"
                            },
                            "id": 14747,
                            "name": "Literal",
                            "src": "6501:28:54"
                          }
                        ],
                        "id": 14748,
                        "name": "FunctionCall",
                        "src": "6299:231:54"
                      }
                    ],
                    "id": 14749,
                    "name": "ExpressionStatement",
                    "src": "6299:231:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_ea412dc5cb606183944736a595fe8ac896e88850ccb6e8100f740a40c7b00966",
                                  "typeString": "literal_string \"No request specified\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 14750,
                            "name": "Identifier",
                            "src": "6541:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14643,
                                          "type": "bytes memory",
                                          "value": "_spends"
                                        },
                                        "id": 14751,
                                        "name": "Identifier",
                                        "src": "6549:7:54"
                                      }
                                    ],
                                    "id": 14752,
                                    "name": "MemberAccess",
                                    "src": "6549:14:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 14753,
                                    "name": "Literal",
                                    "src": "6566:1:54"
                                  }
                                ],
                                "id": 14754,
                                "name": "BinaryOperation",
                                "src": "6549:18:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14686,
                                      "type": "uint256",
                                      "value": "_paysLen"
                                    },
                                    "id": 14755,
                                    "name": "Identifier",
                                    "src": "6571:8:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 14756,
                                    "name": "Literal",
                                    "src": "6582:1:54"
                                  }
                                ],
                                "id": 14757,
                                "name": "BinaryOperation",
                                "src": "6571:12:54"
                              }
                            ],
                            "id": 14758,
                            "name": "BinaryOperation",
                            "src": "6549:34:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4e6f207265717565737420737065636966696564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"No request specified\"",
                              "value": "No request specified"
                            },
                            "id": 14759,
                            "name": "Literal",
                            "src": "6585:22:54"
                          }
                        ],
                        "id": 14760,
                        "name": "FunctionCall",
                        "src": "6541:67:54"
                      }
                    ],
                    "id": 14761,
                    "name": "ExpressionStatement",
                    "src": "6541:67:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        14763
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_req",
                          "scope": 14863,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct OnDemandSPV.ProofRequest",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ProofRequest",
                              "referencedDeclaration": 14438,
                              "type": "struct OnDemandSPV.ProofRequest"
                            },
                            "id": 14762,
                            "name": "UserDefinedTypeName",
                            "src": "6619:12:54"
                          }
                        ],
                        "id": 14763,
                        "name": "VariableDeclaration",
                        "src": "6619:25:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct OnDemandSPV.ProofRequest storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14450,
                              "type": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)",
                              "value": "requests"
                            },
                            "id": 14764,
                            "name": "Identifier",
                            "src": "6647:8:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14659,
                              "type": "uint256",
                              "value": "_requestID"
                            },
                            "id": 14765,
                            "name": "Identifier",
                            "src": "6656:10:54"
                          }
                        ],
                        "id": 14766,
                        "name": "IndexAccess",
                        "src": "6647:20:54"
                      }
                    ],
                    "id": 14767,
                    "name": "VariableDeclarationStatement",
                    "src": "6619:48:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "owner",
                              "referencedDeclaration": 14435,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14763,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14768,
                                "name": "Identifier",
                                "src": "6677:4:54"
                              }
                            ],
                            "id": 14770,
                            "name": "MemberAccess",
                            "src": "6677:10:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18360,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 14771,
                                "name": "Identifier",
                                "src": "6690:3:54"
                              }
                            ],
                            "id": 14772,
                            "name": "MemberAccess",
                            "src": "6690:10:54"
                          }
                        ],
                        "id": 14773,
                        "name": "Assignment",
                        "src": "6677:23:54"
                      }
                    ],
                    "id": 14774,
                    "name": "ExpressionStatement",
                    "src": "6677:23:54"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14643,
                                  "type": "bytes memory",
                                  "value": "_spends"
                                },
                                "id": 14775,
                                "name": "Identifier",
                                "src": "6715:7:54"
                              }
                            ],
                            "id": 14776,
                            "name": "MemberAccess",
                            "src": "6715:14:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 14777,
                            "name": "Literal",
                            "src": "6732:1:54"
                          }
                        ],
                        "id": 14778,
                        "name": "BinaryOperation",
                        "src": "6715:18:54"
                      },
                      {
                        "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": "spends",
                                      "referencedDeclaration": 14423,
                                      "type": "bytes32"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14763,
                                          "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                          "value": "_req"
                                        },
                                        "id": 14779,
                                        "name": "Identifier",
                                        "src": "6749:4:54"
                                      }
                                    ],
                                    "id": 14781,
                                    "name": "MemberAccess",
                                    "src": "6749:11:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes32",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18354,
                                          "type": "function (bytes memory) pure returns (bytes32)",
                                          "value": "keccak256"
                                        },
                                        "id": 14782,
                                        "name": "Identifier",
                                        "src": "6763:9:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14643,
                                          "type": "bytes memory",
                                          "value": "_spends"
                                        },
                                        "id": 14783,
                                        "name": "Identifier",
                                        "src": "6773:7:54"
                                      }
                                    ],
                                    "id": 14784,
                                    "name": "FunctionCall",
                                    "src": "6763:18:54"
                                  }
                                ],
                                "id": 14785,
                                "name": "Assignment",
                                "src": "6749:32:54"
                              }
                            ],
                            "id": 14786,
                            "name": "ExpressionStatement",
                            "src": "6749:32:54"
                          }
                        ],
                        "id": 14787,
                        "name": "Block",
                        "src": "6735:57:54"
                      }
                    ],
                    "id": 14788,
                    "name": "IfStatement",
                    "src": "6711:81:54"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14686,
                              "type": "uint256",
                              "value": "_paysLen"
                            },
                            "id": 14789,
                            "name": "Identifier",
                            "src": "6805:8:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 14790,
                            "name": "Literal",
                            "src": "6816:1:54"
                          }
                        ],
                        "id": 14791,
                        "name": "BinaryOperation",
                        "src": "6805:12:54"
                      },
                      {
                        "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": "pays",
                                      "referencedDeclaration": 14425,
                                      "type": "bytes32"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14763,
                                          "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                          "value": "_req"
                                        },
                                        "id": 14792,
                                        "name": "Identifier",
                                        "src": "6833:4:54"
                                      }
                                    ],
                                    "id": 14794,
                                    "name": "MemberAccess",
                                    "src": "6833:9:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes32",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18354,
                                          "type": "function (bytes memory) pure returns (bytes32)",
                                          "value": "keccak256"
                                        },
                                        "id": 14795,
                                        "name": "Identifier",
                                        "src": "6845:9:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14669,
                                          "type": "bytes memory",
                                          "value": "pays"
                                        },
                                        "id": 14796,
                                        "name": "Identifier",
                                        "src": "6855:4:54"
                                      }
                                    ],
                                    "id": 14797,
                                    "name": "FunctionCall",
                                    "src": "6845:15:54"
                                  }
                                ],
                                "id": 14798,
                                "name": "Assignment",
                                "src": "6833:27:54"
                              }
                            ],
                            "id": 14799,
                            "name": "ExpressionStatement",
                            "src": "6833:27:54"
                          }
                        ],
                        "id": 14800,
                        "name": "Block",
                        "src": "6819:52:54"
                      }
                    ],
                    "id": 14801,
                    "name": "IfStatement",
                    "src": "6801:70:54"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14647,
                              "type": "uint64",
                              "value": "_paysValue"
                            },
                            "id": 14802,
                            "name": "Identifier",
                            "src": "6884:10:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 14803,
                            "name": "Literal",
                            "src": "6897:1:54"
                          }
                        ],
                        "id": 14804,
                        "name": "BinaryOperation",
                        "src": "6884:14:54"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint64"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "paysValue",
                                      "referencedDeclaration": 14431,
                                      "type": "uint64"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14763,
                                          "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                          "value": "_req"
                                        },
                                        "id": 14805,
                                        "name": "Identifier",
                                        "src": "6914:4:54"
                                      }
                                    ],
                                    "id": 14807,
                                    "name": "MemberAccess",
                                    "src": "6914:14:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14647,
                                      "type": "uint64",
                                      "value": "_paysValue"
                                    },
                                    "id": 14808,
                                    "name": "Identifier",
                                    "src": "6931:10:54"
                                  }
                                ],
                                "id": 14809,
                                "name": "Assignment",
                                "src": "6914:27:54"
                              }
                            ],
                            "id": 14810,
                            "name": "ExpressionStatement",
                            "src": "6914:27:54"
                          }
                        ],
                        "id": 14811,
                        "name": "Block",
                        "src": "6900:52:54"
                      }
                    ],
                    "id": 14812,
                    "name": "IfStatement",
                    "src": "6880:72:54"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14651,
                                  "type": "uint8",
                                  "value": "_numConfs"
                                },
                                "id": 14813,
                                "name": "Identifier",
                                "src": "6965:9:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 14814,
                                "name": "Literal",
                                "src": "6977:1:54"
                              }
                            ],
                            "id": 14815,
                            "name": "BinaryOperation",
                            "src": "6965:13:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14651,
                                  "type": "uint8",
                                  "value": "_numConfs"
                                },
                                "id": 14816,
                                "name": "Identifier",
                                "src": "6982:9:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "323431",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 241",
                                  "value": "241"
                                },
                                "id": 14817,
                                "name": "Literal",
                                "src": "6994:3:54"
                              }
                            ],
                            "id": 14818,
                            "name": "BinaryOperation",
                            "src": "6982:15:54"
                          }
                        ],
                        "id": 14819,
                        "name": "BinaryOperation",
                        "src": "6965:32:54"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint8"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "numConfs",
                                      "referencedDeclaration": 14433,
                                      "type": "uint8"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14763,
                                          "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                          "value": "_req"
                                        },
                                        "id": 14820,
                                        "name": "Identifier",
                                        "src": "7041:4:54"
                                      }
                                    ],
                                    "id": 14822,
                                    "name": "MemberAccess",
                                    "src": "7041:13:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14651,
                                      "type": "uint8",
                                      "value": "_numConfs"
                                    },
                                    "id": 14823,
                                    "name": "Identifier",
                                    "src": "7057:9:54"
                                  }
                                ],
                                "id": 14824,
                                "name": "Assignment",
                                "src": "7041:25:54"
                              }
                            ],
                            "id": 14825,
                            "name": "ExpressionStatement",
                            "src": "7041:25:54"
                          }
                        ],
                        "id": 14826,
                        "name": "Block",
                        "src": "6999:78:54"
                      }
                    ],
                    "id": 14827,
                    "name": "IfStatement",
                    "src": "6961:116:54"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14653,
                              "type": "uint256",
                              "value": "_notBefore"
                            },
                            "id": 14828,
                            "name": "Identifier",
                            "src": "7090:10:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 14829,
                            "name": "Literal",
                            "src": "7103:1:54"
                          }
                        ],
                        "id": 14830,
                        "name": "BinaryOperation",
                        "src": "7090:14:54"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "notBefore",
                                      "referencedDeclaration": 14427,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14763,
                                          "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                          "value": "_req"
                                        },
                                        "id": 14831,
                                        "name": "Identifier",
                                        "src": "7120:4:54"
                                      }
                                    ],
                                    "id": 14833,
                                    "name": "MemberAccess",
                                    "src": "7120:14:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14653,
                                      "type": "uint256",
                                      "value": "_notBefore"
                                    },
                                    "id": 14834,
                                    "name": "Identifier",
                                    "src": "7137:10:54"
                                  }
                                ],
                                "id": 14835,
                                "name": "Assignment",
                                "src": "7120:27:54"
                              }
                            ],
                            "id": 14836,
                            "name": "ExpressionStatement",
                            "src": "7120:27:54"
                          }
                        ],
                        "id": 14837,
                        "name": "Block",
                        "src": "7106:52:54"
                      }
                    ],
                    "id": 14838,
                    "name": "IfStatement",
                    "src": "7086:72:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "consumer",
                              "referencedDeclaration": 14429,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14763,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14839,
                                "name": "Identifier",
                                "src": "7167:4:54"
                              }
                            ],
                            "id": 14841,
                            "name": "MemberAccess",
                            "src": "7167:13:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14649,
                              "type": "address",
                              "value": "_consumer"
                            },
                            "id": 14842,
                            "name": "Identifier",
                            "src": "7183:9:54"
                          }
                        ],
                        "id": 14843,
                        "name": "Assignment",
                        "src": "7167:25:54"
                      }
                    ],
                    "id": 14844,
                    "name": "ExpressionStatement",
                    "src": "7167:25:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "enum OnDemandSPV.RequestStates"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "state",
                              "referencedDeclaration": 14437,
                              "type": "enum OnDemandSPV.RequestStates"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14763,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14845,
                                "name": "Identifier",
                                "src": "7202:4:54"
                              }
                            ],
                            "id": 14847,
                            "name": "MemberAccess",
                            "src": "7202:10:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "ACTIVE",
                              "referencedDeclaration": null,
                              "type": "enum OnDemandSPV.RequestStates"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14442,
                                  "type": "type(enum OnDemandSPV.RequestStates)",
                                  "value": "RequestStates"
                                },
                                "id": 14848,
                                "name": "Identifier",
                                "src": "7215:13:54"
                              }
                            ],
                            "id": 14849,
                            "name": "MemberAccess",
                            "src": "7215:20:54"
                          }
                        ],
                        "id": 14850,
                        "name": "Assignment",
                        "src": "7202:33:54"
                      }
                    ],
                    "id": 14851,
                    "name": "ExpressionStatement",
                    "src": "7202:33:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14237,
                              "type": "function (address,uint256,uint64,bytes memory,bytes memory)",
                              "value": "NewProofRequest"
                            },
                            "id": 14852,
                            "name": "Identifier",
                            "src": "7251:15:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18360,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 14853,
                                "name": "Identifier",
                                "src": "7267:3:54"
                              }
                            ],
                            "id": 14854,
                            "name": "MemberAccess",
                            "src": "7267:10:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14659,
                              "type": "uint256",
                              "value": "_requestID"
                            },
                            "id": 14855,
                            "name": "Identifier",
                            "src": "7279:10:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14647,
                              "type": "uint64",
                              "value": "_paysValue"
                            },
                            "id": 14856,
                            "name": "Identifier",
                            "src": "7291:10:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14643,
                              "type": "bytes memory",
                              "value": "_spends"
                            },
                            "id": 14857,
                            "name": "Identifier",
                            "src": "7303:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14669,
                              "type": "bytes memory",
                              "value": "pays"
                            },
                            "id": 14858,
                            "name": "Identifier",
                            "src": "7312:4:54"
                          }
                        ],
                        "id": 14859,
                        "name": "FunctionCall",
                        "src": "7251:66:54"
                      }
                    ],
                    "id": 14860,
                    "name": "EmitStatement",
                    "src": "7246:71:54"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 14657
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 14659,
                          "type": "uint256",
                          "value": "_requestID"
                        },
                        "id": 14861,
                        "name": "Identifier",
                        "src": "7335:10:54"
                      }
                    ],
                    "id": 14862,
                    "name": "Return",
                    "src": "7328:17:54"
                  }
                ],
                "id": 14863,
                "name": "Block",
                "src": "5655:1697:54"
              }
            ],
            "id": 14864,
            "name": "FunctionDefinition",
            "src": "5439:1913:54"
          },
          {
            "attributes": {
              "documentation": "@notice                 Provide a proof of a tx that satisfies some request\n @dev                    The caller must specify which inputs, which outputs, and which request\n @param  _header         The header containing the merkleroot committing to the tx\n @param  _proof          The merkle proof intermediate nodes\n @param  _version        The tx version, always the first 4 bytes of the tx\n @param  _locktime       The tx locktime, always the last 4 bytes of the tx\n @param  _index          The index of the tx in the merkle tree's leaves\n @param  _reqIndices  The input and output index to check against the request, packed\n @param  _vin            The tx input vector\n @param  _vout           The tx output vector\n @param  _requestID       The id of the request that has been triggered\n @return                 True if succesful, error otherwise",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "provideProof",
              "scope": 15277,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_header",
                      "scope": 14941,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 14865,
                        "name": "ElementaryTypeName",
                        "src": "8324:5:54"
                      }
                    ],
                    "id": 14866,
                    "name": "VariableDeclaration",
                    "src": "8324:22:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_proof",
                      "scope": 14941,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 14867,
                        "name": "ElementaryTypeName",
                        "src": "8356:5:54"
                      }
                    ],
                    "id": 14868,
                    "name": "VariableDeclaration",
                    "src": "8356:21:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_version",
                      "scope": 14941,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 14869,
                        "name": "ElementaryTypeName",
                        "src": "8387:6:54"
                      }
                    ],
                    "id": 14870,
                    "name": "VariableDeclaration",
                    "src": "8387:15:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_locktime",
                      "scope": 14941,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 14871,
                        "name": "ElementaryTypeName",
                        "src": "8412:6:54"
                      }
                    ],
                    "id": 14872,
                    "name": "VariableDeclaration",
                    "src": "8412:16:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_index",
                      "scope": 14941,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14873,
                        "name": "ElementaryTypeName",
                        "src": "8438:7:54"
                      }
                    ],
                    "id": 14874,
                    "name": "VariableDeclaration",
                    "src": "8438:14:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_reqIndices",
                      "scope": 14941,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 14875,
                        "name": "ElementaryTypeName",
                        "src": "8462:6:54"
                      }
                    ],
                    "id": 14876,
                    "name": "VariableDeclaration",
                    "src": "8462:18:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_vin",
                      "scope": 14941,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 14877,
                        "name": "ElementaryTypeName",
                        "src": "8490:5:54"
                      }
                    ],
                    "id": 14878,
                    "name": "VariableDeclaration",
                    "src": "8490:19:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_vout",
                      "scope": 14941,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 14879,
                        "name": "ElementaryTypeName",
                        "src": "8519:5:54"
                      }
                    ],
                    "id": 14880,
                    "name": "VariableDeclaration",
                    "src": "8519:20:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_requestID",
                      "scope": 14941,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14881,
                        "name": "ElementaryTypeName",
                        "src": "8549:7:54"
                      }
                    ],
                    "id": 14882,
                    "name": "VariableDeclaration",
                    "src": "8549:18:54"
                  }
                ],
                "id": 14883,
                "name": "ParameterList",
                "src": "8314:259:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 14941,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 14884,
                        "name": "ElementaryTypeName",
                        "src": "8592:4:54"
                      }
                    ],
                    "id": 14885,
                    "name": "VariableDeclaration",
                    "src": "8592:4:54"
                  }
                ],
                "id": 14886,
                "name": "ParameterList",
                "src": "8591:6:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        14888
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_txid",
                          "scope": 14940,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 14887,
                            "name": "ElementaryTypeName",
                            "src": "8608:7:54"
                          }
                        ],
                        "id": 14888,
                        "name": "VariableDeclaration",
                        "src": "8608:13:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "hash256",
                              "referencedDeclaration": 11851,
                              "type": "function (bytes memory) pure returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_calldata_ptr",
                                          "typeString": "bytes calldata"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_calldata_ptr",
                                          "typeString": "bytes calldata"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "member_name": "encodePacked",
                                      "referencedDeclaration": null,
                                      "type": "function () pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18347,
                                          "type": "abi",
                                          "value": "abi"
                                        },
                                        "id": 14889,
                                        "name": "Identifier",
                                        "src": "8624:3:54"
                                      }
                                    ],
                                    "id": 14890,
                                    "name": "MemberAccess",
                                    "src": "8624:16:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14870,
                                      "type": "bytes4",
                                      "value": "_version"
                                    },
                                    "id": 14891,
                                    "name": "Identifier",
                                    "src": "8641:8:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14878,
                                      "type": "bytes calldata",
                                      "value": "_vin"
                                    },
                                    "id": 14892,
                                    "name": "Identifier",
                                    "src": "8651:4:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14880,
                                      "type": "bytes calldata",
                                      "value": "_vout"
                                    },
                                    "id": 14893,
                                    "name": "Identifier",
                                    "src": "8657:5:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14872,
                                      "type": "bytes4",
                                      "value": "_locktime"
                                    },
                                    "id": 14894,
                                    "name": "Identifier",
                                    "src": "8664:9:54"
                                  }
                                ],
                                "id": 14895,
                                "name": "FunctionCall",
                                "src": "8624:50:54"
                              }
                            ],
                            "id": 14896,
                            "name": "MemberAccess",
                            "src": "8624:58:54"
                          }
                        ],
                        "id": 14897,
                        "name": "FunctionCall",
                        "src": "8624:60:54"
                      }
                    ],
                    "id": 14898,
                    "name": "VariableDeclarationStatement",
                    "src": "8608:76:54"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!",
                          "prefix": true,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14446,
                                  "type": "mapping(bytes32 => bool)",
                                  "value": "validatedTxns"
                                },
                                "id": 14899,
                                "name": "Identifier",
                                "src": "8842:13:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14888,
                                  "type": "bytes32",
                                  "value": "_txid"
                                },
                                "id": 14900,
                                "name": "Identifier",
                                "src": "8856:5:54"
                              }
                            ],
                            "id": 14901,
                            "name": "IndexAccess",
                            "src": "8842:20:54"
                          }
                        ],
                        "id": 14902,
                        "name": "UnaryOperation",
                        "src": "8841:21:54"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_calldata_ptr",
                                          "typeString": "bytes calldata"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_calldata_ptr",
                                          "typeString": "bytes calldata"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15086,
                                      "type": "function (bytes memory,bytes memory,uint256,bytes32,uint256) view returns (bool)",
                                      "value": "_checkInclusion"
                                    },
                                    "id": 14903,
                                    "name": "Identifier",
                                    "src": "8878:15:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14866,
                                      "type": "bytes calldata",
                                      "value": "_header"
                                    },
                                    "id": 14904,
                                    "name": "Identifier",
                                    "src": "8911:7:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14868,
                                      "type": "bytes calldata",
                                      "value": "_proof"
                                    },
                                    "id": 14905,
                                    "name": "Identifier",
                                    "src": "8936:6:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14874,
                                      "type": "uint256",
                                      "value": "_index"
                                    },
                                    "id": 14906,
                                    "name": "Identifier",
                                    "src": "8960:6:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14888,
                                      "type": "bytes32",
                                      "value": "_txid"
                                    },
                                    "id": 14907,
                                    "name": "Identifier",
                                    "src": "8984:5:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14882,
                                      "type": "uint256",
                                      "value": "_requestID"
                                    },
                                    "id": 14908,
                                    "name": "Identifier",
                                    "src": "9007:10:54"
                                  }
                                ],
                                "id": 14909,
                                "name": "FunctionCall",
                                "src": "8878:140:54"
                              }
                            ],
                            "id": 14910,
                            "name": "ExpressionStatement",
                            "src": "8878:140:54"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14446,
                                          "type": "mapping(bytes32 => bool)",
                                          "value": "validatedTxns"
                                        },
                                        "id": 14911,
                                        "name": "Identifier",
                                        "src": "9032:13:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14888,
                                          "type": "bytes32",
                                          "value": "_txid"
                                        },
                                        "id": 14912,
                                        "name": "Identifier",
                                        "src": "9046:5:54"
                                      }
                                    ],
                                    "id": 14913,
                                    "name": "IndexAccess",
                                    "src": "9032:20:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "74727565",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "bool",
                                      "type": "bool",
                                      "value": "true"
                                    },
                                    "id": 14914,
                                    "name": "Literal",
                                    "src": "9055:4:54"
                                  }
                                ],
                                "id": 14915,
                                "name": "Assignment",
                                "src": "9032:27:54"
                              }
                            ],
                            "id": 14916,
                            "name": "ExpressionStatement",
                            "src": "9032:27:54"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "bytes32"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14461,
                                      "type": "bytes32",
                                      "value": "latestValidatedTx"
                                    },
                                    "id": 14917,
                                    "name": "Identifier",
                                    "src": "9073:17:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14888,
                                      "type": "bytes32",
                                      "value": "_txid"
                                    },
                                    "id": 14918,
                                    "name": "Identifier",
                                    "src": "9093:5:54"
                                  }
                                ],
                                "id": 14919,
                                "name": "Assignment",
                                "src": "9073:25:54"
                              }
                            ],
                            "id": 14920,
                            "name": "ExpressionStatement",
                            "src": "9073:25:54"
                          }
                        ],
                        "id": 14921,
                        "name": "Block",
                        "src": "8864:245:54"
                      }
                    ],
                    "id": 14922,
                    "name": "IfStatement",
                    "src": "8837:272:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 15276,
                              "type": "function (uint16,bytes memory,bytes memory,uint256) view returns (bool)",
                              "value": "_checkRequests"
                            },
                            "id": 14923,
                            "name": "Identifier",
                            "src": "9118:14:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14876,
                              "type": "uint16",
                              "value": "_reqIndices"
                            },
                            "id": 14924,
                            "name": "Identifier",
                            "src": "9133:11:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14878,
                              "type": "bytes calldata",
                              "value": "_vin"
                            },
                            "id": 14925,
                            "name": "Identifier",
                            "src": "9146:4:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14880,
                              "type": "bytes calldata",
                              "value": "_vout"
                            },
                            "id": 14926,
                            "name": "Identifier",
                            "src": "9152:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14882,
                              "type": "uint256",
                              "value": "_requestID"
                            },
                            "id": 14927,
                            "name": "Identifier",
                            "src": "9159:10:54"
                          }
                        ],
                        "id": 14928,
                        "name": "FunctionCall",
                        "src": "9118:52:54"
                      }
                    ],
                    "id": 14929,
                    "name": "ExpressionStatement",
                    "src": "9118:52:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 15017,
                              "type": "function (bytes32,uint16,bytes memory,bytes memory,uint256) returns (bool)",
                              "value": "_callCallback"
                            },
                            "id": 14930,
                            "name": "Identifier",
                            "src": "9180:13:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14888,
                              "type": "bytes32",
                              "value": "_txid"
                            },
                            "id": 14931,
                            "name": "Identifier",
                            "src": "9194:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14876,
                              "type": "uint16",
                              "value": "_reqIndices"
                            },
                            "id": 14932,
                            "name": "Identifier",
                            "src": "9201:11:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14878,
                              "type": "bytes calldata",
                              "value": "_vin"
                            },
                            "id": 14933,
                            "name": "Identifier",
                            "src": "9214:4:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14880,
                              "type": "bytes calldata",
                              "value": "_vout"
                            },
                            "id": 14934,
                            "name": "Identifier",
                            "src": "9220:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14882,
                              "type": "uint256",
                              "value": "_requestID"
                            },
                            "id": 14935,
                            "name": "Identifier",
                            "src": "9227:10:54"
                          }
                        ],
                        "id": 14936,
                        "name": "FunctionCall",
                        "src": "9180:58:54"
                      }
                    ],
                    "id": 14937,
                    "name": "ExpressionStatement",
                    "src": "9180:58:54"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 14886
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 14938,
                        "name": "Literal",
                        "src": "9255:4:54"
                      }
                    ],
                    "id": 14939,
                    "name": "Return",
                    "src": "9248:11:54"
                  }
                ],
                "id": 14940,
                "name": "Block",
                "src": "8598:668:54"
              }
            ],
            "id": 14941,
            "name": "FunctionDefinition",
            "src": "8293:973:54"
          },
          {
            "attributes": {
              "documentation": "@notice             Notify a consumer that one of its requests has been triggered\n @dev                We include information about the tx that triggered it, so the consumer can take actions\n @param  _vin        The tx input vector\n @param  _vout       The tx output vector\n @param  _txid       The transaction ID\n @param  _requestID   The id of the request that has been triggered",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_callCallback",
              "scope": 15277,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txid",
                      "scope": 15017,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 14942,
                        "name": "ElementaryTypeName",
                        "src": "9729:7:54"
                      }
                    ],
                    "id": 14943,
                    "name": "VariableDeclaration",
                    "src": "9729:13:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_reqIndices",
                      "scope": 15017,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 14944,
                        "name": "ElementaryTypeName",
                        "src": "9752:6:54"
                      }
                    ],
                    "id": 14945,
                    "name": "VariableDeclaration",
                    "src": "9752:18:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_vin",
                      "scope": 15017,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 14946,
                        "name": "ElementaryTypeName",
                        "src": "9780:5:54"
                      }
                    ],
                    "id": 14947,
                    "name": "VariableDeclaration",
                    "src": "9780:17:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_vout",
                      "scope": 15017,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 14948,
                        "name": "ElementaryTypeName",
                        "src": "9807:5:54"
                      }
                    ],
                    "id": 14949,
                    "name": "VariableDeclaration",
                    "src": "9807:18:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_requestID",
                      "scope": 15017,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 14950,
                        "name": "ElementaryTypeName",
                        "src": "9835:7:54"
                      }
                    ],
                    "id": 14951,
                    "name": "VariableDeclaration",
                    "src": "9835:18:54"
                  }
                ],
                "id": 14952,
                "name": "ParameterList",
                "src": "9719:140:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 15017,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 14953,
                        "name": "ElementaryTypeName",
                        "src": "9878:4:54"
                      }
                    ],
                    "id": 14954,
                    "name": "VariableDeclaration",
                    "src": "9878:4:54"
                  }
                ],
                "id": 14955,
                "name": "ParameterList",
                "src": "9877:6:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        14957
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_req",
                          "scope": 15016,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct OnDemandSPV.ProofRequest",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ProofRequest",
                              "referencedDeclaration": 14438,
                              "type": "struct OnDemandSPV.ProofRequest"
                            },
                            "id": 14956,
                            "name": "UserDefinedTypeName",
                            "src": "9894:12:54"
                          }
                        ],
                        "id": 14957,
                        "name": "VariableDeclaration",
                        "src": "9894:25:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct OnDemandSPV.ProofRequest storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14450,
                              "type": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)",
                              "value": "requests"
                            },
                            "id": 14958,
                            "name": "Identifier",
                            "src": "9922:8:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14951,
                              "type": "uint256",
                              "value": "_requestID"
                            },
                            "id": 14959,
                            "name": "Identifier",
                            "src": "9931:10:54"
                          }
                        ],
                        "id": 14960,
                        "name": "IndexAccess",
                        "src": "9922:20:54"
                      }
                    ],
                    "id": 14961,
                    "name": "VariableDeclarationStatement",
                    "src": "9894:48:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        14963
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "c",
                          "scope": 15016,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract ISPVConsumer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ISPVConsumer",
                              "referencedDeclaration": 14225,
                              "type": "contract ISPVConsumer"
                            },
                            "id": 14962,
                            "name": "UserDefinedTypeName",
                            "src": "9952:12:54"
                          }
                        ],
                        "id": 14963,
                        "name": "VariableDeclaration",
                        "src": "9952:14:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract ISPVConsumer",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14225,
                              "type": "type(contract ISPVConsumer)",
                              "value": "ISPVConsumer"
                            },
                            "id": 14964,
                            "name": "Identifier",
                            "src": "9969:12:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "consumer",
                              "referencedDeclaration": 14429,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14957,
                                  "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                  "value": "_req"
                                },
                                "id": 14965,
                                "name": "Identifier",
                                "src": "9982:4:54"
                              }
                            ],
                            "id": 14966,
                            "name": "MemberAccess",
                            "src": "9982:13:54"
                          }
                        ],
                        "id": 14967,
                        "name": "FunctionCall",
                        "src": "9969:27:54"
                      }
                    ],
                    "id": 14968,
                    "name": "VariableDeclarationStatement",
                    "src": "9952:44:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        14970
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_inputIndex",
                          "scope": 15016,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint8",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint8",
                              "type": "uint8"
                            },
                            "id": 14969,
                            "name": "ElementaryTypeName",
                            "src": "10007:5:54"
                          }
                        ],
                        "id": 14970,
                        "name": "VariableDeclaration",
                        "src": "10007:17:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint8",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint8)",
                              "value": "uint8"
                            },
                            "id": 14971,
                            "name": "ElementaryTypeNameExpression",
                            "src": "10027:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">>",
                              "type": "uint16"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14945,
                                  "type": "uint16",
                                  "value": "_reqIndices"
                                },
                                "id": 14972,
                                "name": "Identifier",
                                "src": "10033:11:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "38",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 8",
                                  "value": "8"
                                },
                                "id": 14973,
                                "name": "Literal",
                                "src": "10048:1:54"
                              }
                            ],
                            "id": 14974,
                            "name": "BinaryOperation",
                            "src": "10033:16:54"
                          }
                        ],
                        "id": 14975,
                        "name": "FunctionCall",
                        "src": "10027:23:54"
                      }
                    ],
                    "id": 14976,
                    "name": "VariableDeclarationStatement",
                    "src": "10007:43:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        14978
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_outputIndex",
                          "scope": 15016,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint8",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint8",
                              "type": "uint8"
                            },
                            "id": 14977,
                            "name": "ElementaryTypeName",
                            "src": "10060:5:54"
                          }
                        ],
                        "id": 14978,
                        "name": "VariableDeclaration",
                        "src": "10060:18:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint8",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint8)",
                              "value": "uint8"
                            },
                            "id": 14979,
                            "name": "ElementaryTypeNameExpression",
                            "src": "10081:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&",
                              "type": "uint16"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14945,
                                  "type": "uint16",
                                  "value": "_reqIndices"
                                },
                                "id": 14980,
                                "name": "Identifier",
                                "src": "10087:11:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30786666",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 255",
                                  "value": "0xff"
                                },
                                "id": 14981,
                                "name": "Literal",
                                "src": "10101:4:54"
                              }
                            ],
                            "id": 14982,
                            "name": "BinaryOperation",
                            "src": "10087:18:54"
                          }
                        ],
                        "id": 14983,
                        "name": "FunctionCall",
                        "src": "10081:25:54"
                      }
                    ],
                    "id": 14984,
                    "name": "VariableDeclarationStatement",
                    "src": "10060:46:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple(bool,bytes memory)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "function (bytes memory) payable returns (bool,bytes memory)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "gas",
                                  "referencedDeclaration": null,
                                  "type": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "call",
                                      "referencedDeclaration": null,
                                      "type": "function (bytes memory) payable returns (bool,bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "address",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_contract$_ISPVConsumer_$14225",
                                                  "typeString": "contract ISPVConsumer"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(address)",
                                              "value": "address"
                                            },
                                            "id": 14985,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "10300:7:54"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 14963,
                                              "type": "contract ISPVConsumer",
                                              "value": "c"
                                            },
                                            "id": 14986,
                                            "name": "Identifier",
                                            "src": "10308:1:54"
                                          }
                                        ],
                                        "id": 14987,
                                        "name": "FunctionCall",
                                        "src": "10300:10:54"
                                      }
                                    ],
                                    "id": 14988,
                                    "name": "MemberAccess",
                                    "src": "10300:15:54"
                                  }
                                ],
                                "id": 14989,
                                "name": "MemberAccess",
                                "src": "10300:19:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14464,
                                  "type": "uint256",
                                  "value": "remoteGasAllowance"
                                },
                                "id": 14990,
                                "name": "Identifier",
                                "src": "10320:18:54"
                              }
                            ],
                            "id": 14991,
                            "name": "FunctionCall",
                            "src": "10300:39:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "encodePacked",
                                  "referencedDeclaration": null,
                                  "type": "function () pure returns (bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18347,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 14992,
                                    "name": "Identifier",
                                    "src": "10353:3:54"
                                  }
                                ],
                                "id": 14993,
                                "name": "MemberAccess",
                                "src": "10353:16:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "selector",
                                  "referencedDeclaration": null,
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "spv",
                                      "referencedDeclaration": 14224,
                                      "type": "function (bytes32,bytes memory,bytes memory,uint256,uint8,uint8) external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14963,
                                          "type": "contract ISPVConsumer",
                                          "value": "c"
                                        },
                                        "id": 14994,
                                        "name": "Identifier",
                                        "src": "10387:1:54"
                                      }
                                    ],
                                    "id": 14995,
                                    "name": "MemberAccess",
                                    "src": "10387:5:54"
                                  }
                                ],
                                "id": 14996,
                                "name": "MemberAccess",
                                "src": "10387:14:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        },
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "member_name": "encode",
                                      "referencedDeclaration": null,
                                      "type": "function () pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18347,
                                          "type": "abi",
                                          "value": "abi"
                                        },
                                        "id": 14997,
                                        "name": "Identifier",
                                        "src": "10419:3:54"
                                      }
                                    ],
                                    "id": 14998,
                                    "name": "MemberAccess",
                                    "src": "10419:10:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14943,
                                      "type": "bytes32",
                                      "value": "_txid"
                                    },
                                    "id": 14999,
                                    "name": "Identifier",
                                    "src": "10430:5:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14947,
                                      "type": "bytes memory",
                                      "value": "_vin"
                                    },
                                    "id": 15000,
                                    "name": "Identifier",
                                    "src": "10437:4:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14949,
                                      "type": "bytes memory",
                                      "value": "_vout"
                                    },
                                    "id": 15001,
                                    "name": "Identifier",
                                    "src": "10443:5:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14951,
                                      "type": "uint256",
                                      "value": "_requestID"
                                    },
                                    "id": 15002,
                                    "name": "Identifier",
                                    "src": "10450:10:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14970,
                                      "type": "uint8",
                                      "value": "_inputIndex"
                                    },
                                    "id": 15003,
                                    "name": "Identifier",
                                    "src": "10462:11:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14978,
                                      "type": "uint8",
                                      "value": "_outputIndex"
                                    },
                                    "id": 15004,
                                    "name": "Identifier",
                                    "src": "10475:12:54"
                                  }
                                ],
                                "id": 15005,
                                "name": "FunctionCall",
                                "src": "10419:69:54"
                              }
                            ],
                            "id": 15006,
                            "name": "FunctionCall",
                            "src": "10353:149:54"
                          }
                        ],
                        "id": 15007,
                        "name": "FunctionCall",
                        "src": "10300:212:54"
                      }
                    ],
                    "id": 15008,
                    "name": "ExpressionStatement",
                    "src": "10300:212:54"
                  },
                  {
                    "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_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14247,
                              "type": "function (bytes32,uint256)",
                              "value": "RequestFilled"
                            },
                            "id": 15009,
                            "name": "Identifier",
                            "src": "10528:13:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14943,
                              "type": "bytes32",
                              "value": "_txid"
                            },
                            "id": 15010,
                            "name": "Identifier",
                            "src": "10542:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14951,
                              "type": "uint256",
                              "value": "_requestID"
                            },
                            "id": 15011,
                            "name": "Identifier",
                            "src": "10549:10:54"
                          }
                        ],
                        "id": 15012,
                        "name": "FunctionCall",
                        "src": "10528:32:54"
                      }
                    ],
                    "id": 15013,
                    "name": "EmitStatement",
                    "src": "10523:37:54"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 14955
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 15014,
                        "name": "Literal",
                        "src": "10578:4:54"
                      }
                    ],
                    "id": 15015,
                    "name": "Return",
                    "src": "10571:11:54"
                  }
                ],
                "id": 15016,
                "name": "Block",
                "src": "9884:705:54"
              }
            ],
            "id": 15017,
            "name": "FunctionDefinition",
            "src": "9697:892:54"
          },
          {
            "attributes": {
              "documentation": "@notice             Verifies inclusion of a tx in a header, and that header in the Relay chain\n @dev                Specifically we check that both the best tip and the heaviest common header confirm it\n @param  _header     The header containing the merkleroot committing to the tx\n @param  _proof      The merkle proof intermediate nodes\n @param  _index      The index of the tx in the merkle tree's leaves\n @param  _txid       The txid that is the proof leaf\n @param _requestID   The ID of the request to check against",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_checkInclusion",
              "scope": 15277,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_header",
                      "scope": 15086,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 15018,
                        "name": "ElementaryTypeName",
                        "src": "11200:5:54"
                      }
                    ],
                    "id": 15019,
                    "name": "VariableDeclaration",
                    "src": "11200:20:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_proof",
                      "scope": 15086,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 15020,
                        "name": "ElementaryTypeName",
                        "src": "11230:5:54"
                      }
                    ],
                    "id": 15021,
                    "name": "VariableDeclaration",
                    "src": "11230:19:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_index",
                      "scope": 15086,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 15022,
                        "name": "ElementaryTypeName",
                        "src": "11259:7:54"
                      }
                    ],
                    "id": 15023,
                    "name": "VariableDeclaration",
                    "src": "11259:14:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txid",
                      "scope": 15086,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 15024,
                        "name": "ElementaryTypeName",
                        "src": "11283:7:54"
                      }
                    ],
                    "id": 15025,
                    "name": "VariableDeclaration",
                    "src": "11283:13:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_requestID",
                      "scope": 15086,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 15026,
                        "name": "ElementaryTypeName",
                        "src": "11306:7:54"
                      }
                    ],
                    "id": 15027,
                    "name": "VariableDeclaration",
                    "src": "11306:18:54"
                  }
                ],
                "id": 15028,
                "name": "ParameterList",
                "src": "11190:140:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 15086,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 15029,
                        "name": "ElementaryTypeName",
                        "src": "11354:4:54"
                      }
                    ],
                    "id": 15030,
                    "name": "VariableDeclaration",
                    "src": "11354:4:54"
                  }
                ],
                "id": 15031,
                "name": "ParameterList",
                "src": "11353:6:54"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_5751ef9989bda086d164ad8360af3789de2a27dbfadcb90d57c6eb7971147307",
                                  "typeString": "literal_string \"Bad inclusion proof\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 15032,
                            "name": "Identifier",
                            "src": "11370:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "prove",
                                  "referencedDeclaration": 14031,
                                  "type": "function (bytes32,bytes32,bytes memory,uint256) pure returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14207,
                                      "type": "type(library ValidateSPV)",
                                      "value": "ValidateSPV"
                                    },
                                    "id": 15033,
                                    "name": "Identifier",
                                    "src": "11391:11:54"
                                  }
                                ],
                                "id": 15034,
                                "name": "MemberAccess",
                                "src": "11391:17:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 15025,
                                  "type": "bytes32",
                                  "value": "_txid"
                                },
                                "id": 15035,
                                "name": "Identifier",
                                "src": "11426:5:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toBytes32",
                                      "referencedDeclaration": 13400,
                                      "type": "function (bytes memory) pure returns (bytes32)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                null
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "extractMerkleRootLE",
                                              "referencedDeclaration": 12880,
                                              "type": "function (bytes memory) pure returns (bytes memory)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 15019,
                                                  "type": "bytes memory",
                                                  "value": "_header"
                                                },
                                                "id": 15036,
                                                "name": "Identifier",
                                                "src": "11449:7:54"
                                              }
                                            ],
                                            "id": 15037,
                                            "name": "MemberAccess",
                                            "src": "11449:27:54"
                                          }
                                        ],
                                        "id": 15038,
                                        "name": "FunctionCall",
                                        "src": "11449:29:54"
                                      }
                                    ],
                                    "id": 15039,
                                    "name": "MemberAccess",
                                    "src": "11449:39:54"
                                  }
                                ],
                                "id": 15040,
                                "name": "FunctionCall",
                                "src": "11449:41:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 15021,
                                  "type": "bytes memory",
                                  "value": "_proof"
                                },
                                "id": 15041,
                                "name": "Identifier",
                                "src": "11508:6:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 15023,
                                  "type": "uint256",
                                  "value": "_index"
                                },
                                "id": 15042,
                                "name": "Identifier",
                                "src": "11532:6:54"
                              }
                            ],
                            "id": 15043,
                            "name": "FunctionCall",
                            "src": "11391:148:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "42616420696e636c7573696f6e2070726f6f66",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Bad inclusion proof\"",
                              "value": "Bad inclusion proof"
                            },
                            "id": 15044,
                            "name": "Literal",
                            "src": "11553:21:54"
                          }
                        ],
                        "id": 15045,
                        "name": "FunctionCall",
                        "src": "11370:205:54"
                      }
                    ],
                    "id": 15046,
                    "name": "ExpressionStatement",
                    "src": "11370:205:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        15048
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_headerHash",
                          "scope": 15085,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 15047,
                            "name": "ElementaryTypeName",
                            "src": "11586:7:54"
                          }
                        ],
                        "id": 15048,
                        "name": "VariableDeclaration",
                        "src": "11586:19:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "hash256",
                              "referencedDeclaration": 11851,
                              "type": "function (bytes memory) pure returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 15019,
                                  "type": "bytes memory",
                                  "value": "_header"
                                },
                                "id": 15049,
                                "name": "Identifier",
                                "src": "11608:7:54"
                              }
                            ],
                            "id": 15050,
                            "name": "MemberAccess",
                            "src": "11608:15:54"
                          }
                        ],
                        "id": 15051,
                        "name": "FunctionCall",
                        "src": "11608:17:54"
                      }
                    ],
                    "id": 15052,
                    "name": "VariableDeclarationStatement",
                    "src": "11586:39:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        15054
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_GCD",
                          "scope": 15085,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 15053,
                            "name": "ElementaryTypeName",
                            "src": "11635:7:54"
                          }
                        ],
                        "id": 15054,
                        "name": "VariableDeclaration",
                        "src": "11635:12:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 15436,
                              "type": "function () view returns (bytes32)",
                              "value": "getLastReorgCommonAncestor"
                            },
                            "id": 15055,
                            "name": "Identifier",
                            "src": "11650:26:54"
                          }
                        ],
                        "id": 15056,
                        "name": "FunctionCall",
                        "src": "11650:28:54"
                      }
                    ],
                    "id": 15057,
                    "name": "VariableDeclarationStatement",
                    "src": "11635:43:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_f9087d2c84abb76dfdad3c911fd56fcfbdd0637d4726b5147f1bcf37115514b6",
                                  "typeString": "literal_string \"GCD does not confirm header\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 15058,
                            "name": "Identifier",
                            "src": "11689:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_240_by_1",
                                      "typeString": "int_const 240"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 15999,
                                  "type": "function (bytes32,bytes32,uint256) view returns (bool)",
                                  "value": "_isAncestor"
                                },
                                "id": 15059,
                                "name": "Identifier",
                                "src": "11710:11:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 15048,
                                  "type": "bytes32",
                                  "value": "_headerHash"
                                },
                                "id": 15060,
                                "name": "Identifier",
                                "src": "11739:11:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 15054,
                                  "type": "bytes32",
                                  "value": "_GCD"
                                },
                                "id": 15061,
                                "name": "Identifier",
                                "src": "11768:4:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "323430",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 240",
                                  "value": "240"
                                },
                                "id": 15062,
                                "name": "Literal",
                                "src": "11790:3:54"
                              }
                            ],
                            "id": 15063,
                            "name": "FunctionCall",
                            "src": "11710:84:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "47434420646f6573206e6f7420636f6e6669726d20686561646572",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"GCD does not confirm header\"",
                              "value": "GCD does not confirm header"
                            },
                            "id": 15064,
                            "name": "Literal",
                            "src": "11808:29:54"
                          }
                        ],
                        "id": 15065,
                        "name": "FunctionCall",
                        "src": "11689:149:54"
                      }
                    ],
                    "id": 15066,
                    "name": "ExpressionStatement",
                    "src": "11689:149:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        15068
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_numConfs",
                          "scope": 15085,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint8",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint8",
                              "type": "uint8"
                            },
                            "id": 15067,
                            "name": "ElementaryTypeName",
                            "src": "11848:5:54"
                          }
                        ],
                        "id": 15068,
                        "name": "VariableDeclaration",
                        "src": "11848:15:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "numConfs",
                          "referencedDeclaration": 14433,
                          "type": "uint8"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct OnDemandSPV.ProofRequest storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 14450,
                                  "type": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)",
                                  "value": "requests"
                                },
                                "id": 15069,
                                "name": "Identifier",
                                "src": "11866:8:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 15027,
                                  "type": "uint256",
                                  "value": "_requestID"
                                },
                                "id": 15070,
                                "name": "Identifier",
                                "src": "11875:10:54"
                              }
                            ],
                            "id": 15071,
                            "name": "IndexAccess",
                            "src": "11866:20:54"
                          }
                        ],
                        "id": 15072,
                        "name": "MemberAccess",
                        "src": "11866:29:54"
                      }
                    ],
                    "id": 15073,
                    "name": "VariableDeclarationStatement",
                    "src": "11848:47:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_244db06159704071644f876024bad8c53627b61799cff959f07a577dd4fbf2aa",
                                  "typeString": "literal_string \"Insufficient confirmations\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 15074,
                            "name": "Identifier",
                            "src": "11905:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint8",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15104,
                                      "type": "function (bytes32) view returns (uint8)",
                                      "value": "_getConfs"
                                    },
                                    "id": 15075,
                                    "name": "Identifier",
                                    "src": "11926:9:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15048,
                                      "type": "bytes32",
                                      "value": "_headerHash"
                                    },
                                    "id": 15076,
                                    "name": "Identifier",
                                    "src": "11936:11:54"
                                  }
                                ],
                                "id": 15077,
                                "name": "FunctionCall",
                                "src": "11926:22:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 15068,
                                  "type": "uint8",
                                  "value": "_numConfs"
                                },
                                "id": 15078,
                                "name": "Identifier",
                                "src": "11952:9:54"
                              }
                            ],
                            "id": 15079,
                            "name": "BinaryOperation",
                            "src": "11926:35:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "496e73756666696369656e7420636f6e6669726d6174696f6e73",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Insufficient confirmations\"",
                              "value": "Insufficient confirmations"
                            },
                            "id": 15080,
                            "name": "Literal",
                            "src": "11975:28:54"
                          }
                        ],
                        "id": 15081,
                        "name": "FunctionCall",
                        "src": "11905:99:54"
                      }
                    ],
                    "id": 15082,
                    "name": "ExpressionStatement",
                    "src": "11905:99:54"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 15031
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 15083,
                        "name": "Literal",
                        "src": "12022:4:54"
                      }
                    ],
                    "id": 15084,
                    "name": "Return",
                    "src": "12015:11:54"
                  }
                ],
                "id": 15085,
                "name": "Block",
                "src": "11360:673:54"
              }
            ],
            "id": 15086,
            "name": "FunctionDefinition",
            "src": "11166:867:54"
          },
          {
            "attributes": {
              "documentation": "@notice             Finds the number of headers on top of the argument\n @dev                Bounded to 6400 gas (8 looksups) max\n @param _headerHash  The LE double-sha2 header hash\n @return             The number of headers on top",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_getConfs",
              "scope": 15277,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_headerHash",
                      "scope": 15104,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 15087,
                        "name": "ElementaryTypeName",
                        "src": "12318:7:54"
                      }
                    ],
                    "id": 15088,
                    "name": "VariableDeclaration",
                    "src": "12318:19:54"
                  }
                ],
                "id": 15089,
                "name": "ParameterList",
                "src": "12317:21:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 15104,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 15090,
                        "name": "ElementaryTypeName",
                        "src": "12362:5:54"
                      }
                    ],
                    "id": 15091,
                    "name": "VariableDeclaration",
                    "src": "12362:5:54"
                  }
                ],
                "id": 15092,
                "name": "ParameterList",
                "src": "12361:7:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 15092
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint8",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint8)",
                              "value": "uint8"
                            },
                            "id": 15093,
                            "name": "ElementaryTypeNameExpression",
                            "src": "12386:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15905,
                                      "type": "function (bytes32) view returns (uint256)",
                                      "value": "_findHeight"
                                    },
                                    "id": 15094,
                                    "name": "Identifier",
                                    "src": "12392:11:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15310,
                                      "type": "bytes32",
                                      "value": "bestKnownDigest"
                                    },
                                    "id": 15095,
                                    "name": "Identifier",
                                    "src": "12404:15:54"
                                  }
                                ],
                                "id": 15096,
                                "name": "FunctionCall",
                                "src": "12392:28:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15905,
                                      "type": "function (bytes32) view returns (uint256)",
                                      "value": "_findHeight"
                                    },
                                    "id": 15097,
                                    "name": "Identifier",
                                    "src": "12423:11:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15088,
                                      "type": "bytes32",
                                      "value": "_headerHash"
                                    },
                                    "id": 15098,
                                    "name": "Identifier",
                                    "src": "12435:11:54"
                                  }
                                ],
                                "id": 15099,
                                "name": "FunctionCall",
                                "src": "12423:24:54"
                              }
                            ],
                            "id": 15100,
                            "name": "BinaryOperation",
                            "src": "12392:55:54"
                          }
                        ],
                        "id": 15101,
                        "name": "FunctionCall",
                        "src": "12386:62:54"
                      }
                    ],
                    "id": 15102,
                    "name": "Return",
                    "src": "12379:69:54"
                  }
                ],
                "id": 15103,
                "name": "Block",
                "src": "12369:86:54"
              }
            ],
            "id": 15104,
            "name": "FunctionDefinition",
            "src": "12299:156:54"
          },
          {
            "attributes": {
              "documentation": "@notice                 Verifies that a tx meets the requester's request\n @dev                    Requests can be specify an input, and output, and/or an output value\n @param  _reqIndices  The input and output index to check against the request, packed\n @param  _vin            The tx input vector\n @param  _vout           The tx output vector\n @param  _requestID       The id of the request to check",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_checkRequests",
              "scope": 15277,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_reqIndices",
                      "scope": 15276,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 15105,
                        "name": "ElementaryTypeName",
                        "src": "12939:6:54"
                      }
                    ],
                    "id": 15106,
                    "name": "VariableDeclaration",
                    "src": "12939:18:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_vin",
                      "scope": 15276,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 15107,
                        "name": "ElementaryTypeName",
                        "src": "12967:5:54"
                      }
                    ],
                    "id": 15108,
                    "name": "VariableDeclaration",
                    "src": "12967:17:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_vout",
                      "scope": 15276,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 15109,
                        "name": "ElementaryTypeName",
                        "src": "12994:5:54"
                      }
                    ],
                    "id": 15110,
                    "name": "VariableDeclaration",
                    "src": "12994:18:54"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_requestID",
                      "scope": 15276,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 15111,
                        "name": "ElementaryTypeName",
                        "src": "13022:7:54"
                      }
                    ],
                    "id": 15112,
                    "name": "VariableDeclaration",
                    "src": "13022:18:54"
                  }
                ],
                "id": 15113,
                "name": "ParameterList",
                "src": "12929:117:54"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 15276,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 15114,
                        "name": "ElementaryTypeName",
                        "src": "13070:4:54"
                      }
                    ],
                    "id": 15115,
                    "name": "VariableDeclaration",
                    "src": "13070:4:54"
                  }
                ],
                "id": 15116,
                "name": "ParameterList",
                "src": "13069:6:54"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_368502b0bdc8885c3e3b3ecead53d3b1bdb3a2da2f910f3346449c36bb2964b4",
                                  "typeString": "literal_string \"Vin is malformatted\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 15117,
                            "name": "Identifier",
                            "src": "13086:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "validateVin",
                                  "referencedDeclaration": 12774,
                                  "type": "function (bytes memory) pure returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15108,
                                      "type": "bytes memory",
                                      "value": "_vin"
                                    },
                                    "id": 15118,
                                    "name": "Identifier",
                                    "src": "13094:4:54"
                                  }
                                ],
                                "id": 15119,
                                "name": "MemberAccess",
                                "src": "13094:16:54"
                              }
                            ],
                            "id": 15120,
                            "name": "FunctionCall",
                            "src": "13094:18:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "56696e206973206d616c666f726d6174746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Vin is malformatted\"",
                              "value": "Vin is malformatted"
                            },
                            "id": 15121,
                            "name": "Literal",
                            "src": "13114:21:54"
                          }
                        ],
                        "id": 15122,
                        "name": "FunctionCall",
                        "src": "13086:50:54"
                      }
                    ],
                    "id": 15123,
                    "name": "ExpressionStatement",
                    "src": "13086:50:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_5c3efc01983c8f3c86dfaf00a9c89a4283796d35fc4887b102fe102d3e6bfeb1",
                                  "typeString": "literal_string \"Vout is malformatted\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 15124,
                            "name": "Identifier",
                            "src": "13146:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "validateVout",
                                  "referencedDeclaration": 12866,
                                  "type": "function (bytes memory) pure returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15110,
                                      "type": "bytes memory",
                                      "value": "_vout"
                                    },
                                    "id": 15125,
                                    "name": "Identifier",
                                    "src": "13154:5:54"
                                  }
                                ],
                                "id": 15126,
                                "name": "MemberAccess",
                                "src": "13154:18:54"
                              }
                            ],
                            "id": 15127,
                            "name": "FunctionCall",
                            "src": "13154:20:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "566f7574206973206d616c666f726d6174746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Vout is malformatted\"",
                              "value": "Vout is malformatted"
                            },
                            "id": 15128,
                            "name": "Literal",
                            "src": "13176:22:54"
                          }
                        ],
                        "id": 15129,
                        "name": "FunctionCall",
                        "src": "13146:53:54"
                      }
                    ],
                    "id": 15130,
                    "name": "ExpressionStatement",
                    "src": "13146:53:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        15132
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_inputIndex",
                          "scope": 15275,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint8",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint8",
                              "type": "uint8"
                            },
                            "id": 15131,
                            "name": "ElementaryTypeName",
                            "src": "13210:5:54"
                          }
                        ],
                        "id": 15132,
                        "name": "VariableDeclaration",
                        "src": "13210:17:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint8",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint8)",
                              "value": "uint8"
                            },
                            "id": 15133,
                            "name": "ElementaryTypeNameExpression",
                            "src": "13230:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">>",
                              "type": "uint16"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 15106,
                                  "type": "uint16",
                                  "value": "_reqIndices"
                                },
                                "id": 15134,
                                "name": "Identifier",
                                "src": "13236:11:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "38",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 8",
                                  "value": "8"
                                },
                                "id": 15135,
                                "name": "Literal",
                                "src": "13251:1:54"
                              }
                            ],
                            "id": 15136,
                            "name": "BinaryOperation",
                            "src": "13236:16:54"
                          }
                        ],
                        "id": 15137,
                        "name": "FunctionCall",
                        "src": "13230:23:54"
                      }
                    ],
                    "id": 15138,
                    "name": "VariableDeclarationStatement",
                    "src": "13210:43:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        15140
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_outputIndex",
                          "scope": 15275,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint8",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint8",
                              "type": "uint8"
                            },
                            "id": 15139,
                            "name": "ElementaryTypeName",
                            "src": "13263:5:54"
                          }
                        ],
                        "id": 15140,
                        "name": "VariableDeclaration",
                        "src": "13263:18:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint8",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint8)",
                              "value": "uint8"
                            },
                            "id": 15141,
                            "name": "ElementaryTypeNameExpression",
                            "src": "13284:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&",
                              "type": "uint16"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 15106,
                                  "type": "uint16",
                                  "value": "_reqIndices"
                                },
                                "id": 15142,
                                "name": "Identifier",
                                "src": "13290:11:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30786666",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 255",
                                  "value": "0xff"
                                },
                                "id": 15143,
                                "name": "Literal",
                                "src": "13304:4:54"
                              }
                            ],
                            "id": 15144,
                            "name": "BinaryOperation",
                            "src": "13290:18:54"
                          }
                        ],
                        "id": 15145,
                        "name": "FunctionCall",
                        "src": "13284:25:54"
                      }
                    ],
                    "id": 15146,
                    "name": "VariableDeclarationStatement",
                    "src": "13263:46:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        15148
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_req",
                          "scope": 15275,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct OnDemandSPV.ProofRequest",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ProofRequest",
                              "referencedDeclaration": 14438,
                              "type": "struct OnDemandSPV.ProofRequest"
                            },
                            "id": 15147,
                            "name": "UserDefinedTypeName",
                            "src": "13320:12:54"
                          }
                        ],
                        "id": 15148,
                        "name": "VariableDeclaration",
                        "src": "13320:25:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct OnDemandSPV.ProofRequest storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 14450,
                              "type": "mapping(uint256 => struct OnDemandSPV.ProofRequest storage ref)",
                              "value": "requests"
                            },
                            "id": 15149,
                            "name": "Identifier",
                            "src": "13348:8:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 15112,
                              "type": "uint256",
                              "value": "_requestID"
                            },
                            "id": 15150,
                            "name": "Identifier",
                            "src": "13357:10:54"
                          }
                        ],
                        "id": 15151,
                        "name": "IndexAccess",
                        "src": "13348:20:54"
                      }
                    ],
                    "id": 15152,
                    "name": "VariableDeclarationStatement",
                    "src": "13320:48:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_4681a2b6bed9dce5e1f9da73c2cd68d707964f85a37a294c9704decdbee020d9",
                                  "typeString": "literal_string \"Request is submitted too early\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 15153,
                            "name": "Identifier",
                            "src": "13378:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "notBefore",
                                  "referencedDeclaration": 14427,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15148,
                                      "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                      "value": "_req"
                                    },
                                    "id": 15154,
                                    "name": "Identifier",
                                    "src": "13386:4:54"
                                  }
                                ],
                                "id": 15155,
                                "name": "MemberAccess",
                                "src": "13386:14:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "timestamp",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18350,
                                      "type": "block",
                                      "value": "block"
                                    },
                                    "id": 15156,
                                    "name": "Identifier",
                                    "src": "13404:5:54"
                                  }
                                ],
                                "id": 15157,
                                "name": "MemberAccess",
                                "src": "13404:15:54"
                              }
                            ],
                            "id": 15158,
                            "name": "BinaryOperation",
                            "src": "13386:33:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "52657175657374206973207375626d697474656420746f6f206561726c79",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Request is submitted too early\"",
                              "value": "Request is submitted too early"
                            },
                            "id": 15159,
                            "name": "Literal",
                            "src": "13421:32:54"
                          }
                        ],
                        "id": 15160,
                        "name": "FunctionCall",
                        "src": "13378:76:54"
                      }
                    ],
                    "id": 15161,
                    "name": "ExpressionStatement",
                    "src": "13378:76:54"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_a7f3e5190e1922621b294267d5be3f9ca011d8ae80c8e36b72a53eb1687df322",
                                  "typeString": "literal_string \"Request is not active\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 15162,
                            "name": "Identifier",
                            "src": "13464:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_RequestStates_$14442",
                                "typeString": "enum OnDemandSPV.RequestStates"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "state",
                                  "referencedDeclaration": 14437,
                                  "type": "enum OnDemandSPV.RequestStates"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15148,
                                      "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                      "value": "_req"
                                    },
                                    "id": 15163,
                                    "name": "Identifier",
                                    "src": "13472:4:54"
                                  }
                                ],
                                "id": 15164,
                                "name": "MemberAccess",
                                "src": "13472:10:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "ACTIVE",
                                  "referencedDeclaration": null,
                                  "type": "enum OnDemandSPV.RequestStates"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 14442,
                                      "type": "type(enum OnDemandSPV.RequestStates)",
                                      "value": "RequestStates"
                                    },
                                    "id": 15165,
                                    "name": "Identifier",
                                    "src": "13486:13:54"
                                  }
                                ],
                                "id": 15166,
                                "name": "MemberAccess",
                                "src": "13486:20:54"
                              }
                            ],
                            "id": 15167,
                            "name": "BinaryOperation",
                            "src": "13472:34:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "52657175657374206973206e6f7420616374697665",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Request is not active\"",
                              "value": "Request is not active"
                            },
                            "id": 15168,
                            "name": "Literal",
                            "src": "13508:23:54"
                          }
                        ],
                        "id": 15169,
                        "name": "FunctionCall",
                        "src": "13464:68:54"
                      }
                    ],
                    "id": 15170,
                    "name": "ExpressionStatement",
                    "src": "13464:68:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        15172
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_pays",
                          "scope": 15275,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 15171,
                            "name": "ElementaryTypeName",
                            "src": "13543:7:54"
                          }
                        ],
                        "id": 15172,
                        "name": "VariableDeclaration",
                        "src": "13543:13:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "pays",
                          "referencedDeclaration": 14425,
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 15148,
                              "type": "struct OnDemandSPV.ProofRequest storage pointer",
                              "value": "_req"
                            },
                            "id": 15173,
                            "name": "Identifier",
                            "src": "13559:4:54"
                          }
                        ],
                        "id": 15174,
                        "name": "MemberAccess",
                        "src": "13559:9:54"
                      }
                    ],
                    "id": 15175,
                    "name": "VariableDeclarationStatement",
                    "src": "13543:25:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        15177
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_hasPays",
                          "scope": 15275,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 15176,
                            "name": "ElementaryTypeName",
                            "src": "13578:4:54"
                          }
                        ],
                        "id": 15177,
                        "name": "VariableDeclaration",
                        "src": "13578:13:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 15172,
                              "type": "bytes32",
                              "value": "_pays"
                            },
                            "id": 15178,
                            "name": "Identifier",
                            "src": "13594:5:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes32)",
                                  "value": "bytes32"
                                },
                                "id": 15179,
                                "name": "ElementaryTypeNameExpression",
                                "src": "13603:7:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 15180,
                                "name": "Literal",
                                "src": "13611:1:54"
                              }
                            ],
                            "id": 15181,
                            "name": "FunctionCall",
                            "src": "13603:10:54"
                          }
                        ],
                        "id": 15182,
                        "name": "BinaryOperation",
                        "src": "13594:19:54"
                      }
                    ],
                    "id": 15183,
                    "name": "VariableDeclarationStatement",
                    "src": "13578:35:54"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 15177,
                          "type": "bool",
                          "value": "_hasPays"
                        },
                        "id": 15184,
                        "name": "Identifier",
                        "src": "13627:8:54"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                15186
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "name": "_out",
                                  "scope": 15232,
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "type": "bytes",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": "bytes"
                                    },
                                    "id": 15185,
                                    "name": "ElementaryTypeName",
                                    "src": "13651:5:54"
                                  }
                                ],
                                "id": 15186,
                                "name": "VariableDeclaration",
                                "src": "13651:17:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "extractOutputAtIndex",
                                      "referencedDeclaration": 12456,
                                      "type": "function (bytes memory,uint256) pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 15110,
                                          "type": "bytes memory",
                                          "value": "_vout"
                                        },
                                        "id": 15187,
                                        "name": "Identifier",
                                        "src": "13671:5:54"
                                      }
                                    ],
                                    "id": 15188,
                                    "name": "MemberAccess",
                                    "src": "13671:26:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint8",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(uint8)",
                                          "value": "uint8"
                                        },
                                        "id": 15189,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "13698:5:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 15140,
                                          "type": "uint8",
                                          "value": "_outputIndex"
                                        },
                                        "id": 15190,
                                        "name": "Identifier",
                                        "src": "13704:12:54"
                                      }
                                    ],
                                    "id": 15191,
                                    "name": "FunctionCall",
                                    "src": "13698:19:54"
                                  }
                                ],
                                "id": 15192,
                                "name": "FunctionCall",
                                "src": "13671:47:54"
                              }
                            ],
                            "id": 15193,
                            "name": "VariableDeclarationStatement",
                            "src": "13651:67:54"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                15195
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "name": "_scriptPubkey",
                                  "scope": 15232,
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "type": "bytes",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": "bytes"
                                    },
                                    "id": 15194,
                                    "name": "ElementaryTypeName",
                                    "src": "13732:5:54"
                                  }
                                ],
                                "id": 15195,
                                "name": "VariableDeclaration",
                                "src": "13732:26:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_8_by_1",
                                          "typeString": "int_const 8"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "slice",
                                      "referencedDeclaration": 13281,
                                      "type": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 15186,
                                          "type": "bytes memory",
                                          "value": "_out"
                                        },
                                        "id": 15196,
                                        "name": "Identifier",
                                        "src": "13761:4:54"
                                      }
                                    ],
                                    "id": 15197,
                                    "name": "MemberAccess",
                                    "src": "13761:10:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "38",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 8",
                                      "value": "8"
                                    },
                                    "id": 15198,
                                    "name": "Literal",
                                    "src": "13772:1:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "length",
                                          "referencedDeclaration": null,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 15186,
                                              "type": "bytes memory",
                                              "value": "_out"
                                            },
                                            "id": 15199,
                                            "name": "Identifier",
                                            "src": "13775:4:54"
                                          }
                                        ],
                                        "id": 15200,
                                        "name": "MemberAccess",
                                        "src": "13775:11:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "38",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 8",
                                          "value": "8"
                                        },
                                        "id": 15201,
                                        "name": "Literal",
                                        "src": "13789:1:54"
                                      }
                                    ],
                                    "id": 15202,
                                    "name": "BinaryOperation",
                                    "src": "13775:15:54"
                                  }
                                ],
                                "id": 15203,
                                "name": "FunctionCall",
                                "src": "13761:30:54"
                              }
                            ],
                            "id": 15204,
                            "name": "VariableDeclarationStatement",
                            "src": "13732:59:54"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_38568893899af0ebd2b4e99be2370ce29b9bbd1e5a0c16a3c556aec2aca6a092",
                                          "typeString": "literal_string \"Does not match pays request\""
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        18363,
                                        18364
                                      ],
                                      "referencedDeclaration": 18364,
                                      "type": "function (bool,string memory) pure",
                                      "value": "require"
                                    },
                                    "id": 15205,
                                    "name": "Identifier",
                                    "src": "13805:7:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "==",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes32",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 18354,
                                              "type": "function (bytes memory) pure returns (bytes32)",
                                              "value": "keccak256"
                                            },
                                            "id": 15206,
                                            "name": "Identifier",
                                            "src": "13830:9:54"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 15195,
                                              "type": "bytes memory",
                                              "value": "_scriptPubkey"
                                            },
                                            "id": 15207,
                                            "name": "Identifier",
                                            "src": "13840:13:54"
                                          }
                                        ],
                                        "id": 15208,
                                        "name": "FunctionCall",
                                        "src": "13830:24:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 15172,
                                          "type": "bytes32",
                                          "value": "_pays"
                                        },
                                        "id": 15209,
                                        "name": "Identifier",
                                        "src": "13858:5:54"
                                      }
                                    ],
                                    "id": 15210,
                                    "name": "BinaryOperation",
                                    "src": "13830:33:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "446f6573206e6f74206d6174636820706179732072657175657374",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "string",
                                      "type": "literal_string \"Does not match pays request\"",
                                      "value": "Does not match pays request"
                                    },
                                    "id": 15211,
                                    "name": "Literal",
                                    "src": "13881:29:54"
                                  }
                                ],
                                "id": 15212,
                                "name": "FunctionCall",
                                "src": "13805:106:54"
                              }
                            ],
                            "id": 15213,
                            "name": "ExpressionStatement",
                            "src": "13805:106:54"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                15215
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "name": "_paysValue",
                                  "scope": 15232,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint64",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint64",
                                      "type": "uint64"
                                    },
                                    "id": 15214,
                                    "name": "ElementaryTypeName",
                                    "src": "13925:6:54"
                                  }
                                ],
                                "id": 15215,
                                "name": "VariableDeclaration",
                                "src": "13925:17:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "paysValue",
                                  "referencedDeclaration": 14431,
                                  "type": "uint64"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 15148,
                                      "type": "struct OnDemandSPV.ProofRequest storage pointer",
                                      "value": "_req"
                                    },
                                    "id": 15216,
                                    "name": "Identifier",
                                    "src": "13945:4:54"
                                  }
                                ],
                                "id": 15217,
                                "name": "MemberAccess",
                                "src": "13945:14:54"
                              }
                            ],
                            "id": 15218,
                            "name": "VariableDeclarationStatement",
                            "src": "13925:34:54"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_68e872e17e1b2ae77a5e85bcfdebe12738d15e5123d2d99d39f2db7440122c76",
                                          "typeString": "literal_string \"Does not match value request\""
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        18363,
                                        18364
                                      ],
                                      "referencedDeclaration": 18364,
                                      "type": "function (bool,string memory) pure",
                                      "value": "require"
                                    },
                                    "id": 15219,
                                    "name": "Identifier",
                                    "src": "13973:7:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "||",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint64",
                                            "typeString": "uint64"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "==",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 15215,
                                              "type": "uint64",
                                              "value": "_paysValue"
                                            },
                                            "id": 15220,
                                            "name": "Identifier",
                                            "src": "13998:10:54"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "30",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 0",
                                              "value": "0"
                                            },
                                            "id": 15221,
                                            "name": "Literal",
                                            "src": "14012:1:54"
                                          }
                                        ],
                                        "id": 15222,
                                        "name": "BinaryOperation",
                                        "src": "13998:15:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint64",
                                            "typeString": "uint64"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": ">=",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                null
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "uint64",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    null
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "extractValue",
                                                  "referencedDeclaration": 12496,
                                                  "type": "function (bytes memory) pure returns (uint64)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 15186,
                                                      "type": "bytes memory",
                                                      "value": "_out"
                                                    },
                                                    "id": 15223,
                                                    "name": "Identifier",
                                                    "src": "14033:4:54"
                                                  }
                                                ],
                                                "id": 15224,
                                                "name": "MemberAccess",
                                                "src": "14033:17:54"
                                              }
                                            ],
                                            "id": 15225,
                                            "name": "FunctionCall",
                                            "src": "14033:19:54"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 15215,
                                              "type": "uint64",
                                              "value": "_paysValue"
                                            },
                                            "id": 15226,
                                            "name": "Identifier",
                                            "src": "14056:10:54"
                                          }
                                        ],
                                        "id": 15227,
                                        "name": "BinaryOperation",
                                        "src": "14033:33:54"
                                      }
                                    ],
                                    "id": 15228,
                                    "name": "BinaryOperation",
                                    "src": "13998:68:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "446f6573206e6f74206d617463682076616c75652072657175657374",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "string",
                                      "type": "literal_string \"Does not match value request\"",
                                      "value": "Does not match value request"
                                    },
                                    "id": 15229,
                                    "name": "Literal",
                                    "src": "14084:30:54"
                                  }
                                ],
                                "id": 15230,
                                "name": "FunctionCall",
                                "src": "13973:142:54"
                              }
                            ],
                            "id": 15231,
                            "name": "ExpressionStatement",
                            "src": "13973:142:54"
                          }
                        ],
                        "id": 15232,
                        "name": "Block",
                        "src": "13637:489:54"
                      }
                    ],
                    "id": 15233,
                    "name": "IfStatement",
                    "src": "13623:503:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        15235
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_spends",
                          "scope": 15275,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 15234,
                            "name": "ElementaryTypeName",
                            "src": "14136:7:54"
                          }
                        ],
                        "id": 15235,
                        "name": "VariableDeclaration",
                        "src": "14136:15:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "spends",
                          "referencedDeclaration": 14423,
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 15148,
                              "type": "struct OnDemandSPV.ProofRequest storage pointer",
                              "value": "_req"
                            },
                            "id": 15236,
                            "name": "Identifier",
                            "src": "14154:4:54"
                          }
                        ],
                        "id": 15237,
                        "name": "MemberAccess",
                        "src": "14154:11:54"
                      }
                    ],
                    "id": 15238,
                    "name": "VariableDeclarationStatement",
                    "src": "14136:29:54"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        15240
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_hasSpends",
                          "scope": 15275,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 15239,
                            "name": "ElementaryTypeName",
                            "src": "14175:4:54"
                          }
                        ],
                        "id": 15240,
                        "name": "VariableDeclaration",
                        "src": "14175:15:54"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 15235,
                              "type": "bytes32",
                              "value": "_spends"
                            },
                            "id": 15241,
                            "name": "Identifier",
                            "src": "14193:7:54"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes32)",
                                  "value": "bytes32"
                                },
                                "id": 15242,
                                "name": "ElementaryTypeNameExpression",
                                "src": "14204:7:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 15243,
                                "name": "Literal",
                                "src": "14212:1:54"
                              }
                            ],
                            "id": 15244,
                            "name": "FunctionCall",
                            "src": "14204:10:54"
                          }
                        ],
                        "id": 15245,
                        "name": "BinaryOperation",
                        "src": "14193:21:54"
                      }
                    ],
                    "id": 15246,
                    "name": "VariableDeclarationStatement",
                    "src": "14175:39:54"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 15240,
                          "type": "bool",
                          "value": "_hasSpends"
                        },
                        "id": 15247,
                        "name": "Identifier",
                        "src": "14228:10:54"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                15249
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "name": "_in",
                                  "scope": 15271,
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "type": "bytes",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": "bytes"
                                    },
                                    "id": 15248,
                                    "name": "ElementaryTypeName",
                                    "src": "14254:5:54"
                                  }
                                ],
                                "id": 15249,
                                "name": "VariableDeclaration",
                                "src": "14254:16:54"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "extractInputAtIndex",
                                      "referencedDeclaration": 11983,
                                      "type": "function (bytes memory,uint256) pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 15108,
                                          "type": "bytes memory",
                                          "value": "_vin"
                                        },
                                        "id": 15250,
                                        "name": "Identifier",
                                        "src": "14273:4:54"
                                      }
                                    ],
                                    "id": 15251,
                                    "name": "MemberAccess",
                                    "src": "14273:24:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint8",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(uint8)",
                                          "value": "uint8"
                                        },
                                        "id": 15252,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "14298:5:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 15132,
                                          "type": "uint8",
                                          "value": "_inputIndex"
                                        },
                                        "id": 15253,
                                        "name": "Identifier",
                                        "src": "14304:11:54"
                                      }
                                    ],
                                    "id": 15254,
                                    "name": "FunctionCall",
                                    "src": "14298:18:54"
                                  }
                                ],
                                "id": 15255,
                                "name": "FunctionCall",
                                "src": "14273:44:54"
                              }
                            ],
                            "id": 15256,
                            "name": "VariableDeclarationStatement",
                            "src": "14254:63:54"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_f77100d9a9cb9d9aa9777714d55a8a2246b7105057d341ff2e5e0db7ffaa59bf",
                                          "typeString": "literal_string \"Does not match spends request\""
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        18363,
                                        18364
                                      ],
                                      "referencedDeclaration": 18364,
                                      "type": "function (bool,string memory) pure",
                                      "value": "require"
                                    },
                                    "id": 15257,
                                    "name": "Identifier",
                                    "src": "14331:7:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "||",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "!",
                                          "prefix": true,
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 15240,
                                              "type": "bool",
                                              "value": "_hasSpends"
                                            },
                                            "id": 15258,
                                            "name": "Identifier",
                                            "src": "14357:10:54"
                                          }
                                        ],
                                        "id": 15259,
                                        "name": "UnaryOperation",
                                        "src": "14356:11:54"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "==",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "bytes32",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_bytes_memory_ptr",
                                                      "typeString": "bytes memory"
                                                    }
                                                  ],
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 18354,
                                                  "type": "function (bytes memory) pure returns (bytes32)",
                                                  "value": "keccak256"
                                                },
                                                "id": 15260,
                                                "name": "Identifier",
                                                "src": "14387:9:54"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "arguments": [
                                                    null
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "type": "bytes memory",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        null
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "extractOutpoint",
                                                      "referencedDeclaration": 12249,
                                                      "type": "function (bytes memory) pure returns (bytes memory)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 15249,
                                                          "type": "bytes memory",
                                                          "value": "_in"
                                                        },
                                                        "id": 15261,
                                                        "name": "Identifier",
                                                        "src": "14397:3:54"
                                                      }
                                                    ],
                                                    "id": 15262,
                                                    "name": "MemberAccess",
                                                    "src": "14397:19:54"
                                                  }
                                                ],
                                                "id": 15263,
                                                "name": "FunctionCall",
                                                "src": "14397:21:54"
                                              }
                                            ],
                                            "id": 15264,
                                            "name": "FunctionCall",
                                            "src": "14387:32:54"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 15235,
                                              "type": "bytes32",
                                              "value": "_spends"
                                            },
                                            "id": 15265,
                                            "name": "Identifier",
                                            "src": "14423:7:54"
                                          }
                                        ],
                                        "id": 15266,
                                        "name": "BinaryOperation",
                                        "src": "14387:43:54"
                                      }
                                    ],
                                    "id": 15267,
                                    "name": "BinaryOperation",
                                    "src": "14356:74:54"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "446f6573206e6f74206d61746368207370656e64732072657175657374",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "string",
                                      "type": "literal_string \"Does not match spends request\"",
                                      "value": "Does not match spends request"
                                    },
                                    "id": 15268,
                                    "name": "Literal",
                                    "src": "14448:31:54"
                                  }
                                ],
                                "id": 15269,
                                "name": "FunctionCall",
                                "src": "14331:149:54"
                              }
                            ],
                            "id": 15270,
                            "name": "ExpressionStatement",
                            "src": "14331:149:54"
                          }
                        ],
                        "id": 15271,
                        "name": "Block",
                        "src": "14240:251:54"
                      }
                    ],
                    "id": 15272,
                    "name": "IfStatement",
                    "src": "14224:267:54"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 15116
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 15273,
                        "name": "Literal",
                        "src": "14507:4:54"
                      }
                    ],
                    "id": 15274,
                    "name": "Return",
                    "src": "14500:11:54"
                  }
                ],
                "id": 15275,
                "name": "Block",
                "src": "13076:1442:54"
              }
            ],
            "id": 15276,
            "name": "FunctionDefinition",
            "src": "12905:1613:54"
          }
        ],
        "id": 15277,
        "name": "ContractDefinition",
        "src": "504:14016:54"
      }
    ],
    "id": 15278,
    "name": "SourceUnit",
    "src": "0:14521:54"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T12:01:17.264Z",
  "networkType": "ethereum",
  "devdoc": {
    "methods": {
      "addHeaders(bytes,bytes)": {
        "details": "We check integrity and consistency of the header chain",
        "params": {
          "_anchor": "The header immediately preceeding the new chain",
          "_headers": "A tightly-packed list of 80-byte Bitcoin headers"
        },
        "return": "True if successfully written, error otherwise"
      },
      "addHeadersWithRetarget(bytes,bytes,bytes)": {
        "details": "Checks the retarget, the heights, and the linkage",
        "params": {
          "_headers": "A tightly-packed list of 80-byte Bitcoin headers",
          "_oldPeriodEndHeader": "The last header in the difficulty period being closed",
          "_oldPeriodStartHeader": "The first header in the difficulty period being closed"
        },
        "return": "True if successfully written, error otherwise"
      },
      "cancelRequest(uint256)": {
        "details": "Prevents the relay from forwarding tx infromation",
        "params": {
          "_requestID": "The ID of the request to be cancelled"
        },
        "return": "True if succesful, error otherwise"
      },
      "constructor": {
        "details": "We don't check this AT ALL really. Don't use relays with bad genesis",
        "params": {
          "_genesisHeader": "The starting header",
          "_height": "The starting height",
          "_periodStart": "The hash of the first header in the genesis epoch"
        }
      },
      "findAncestor(bytes32,uint256)": {
        "details": "Will fail if the header is unknown",
        "params": {
          "_digest": "The header digest to search for"
        },
        "return": "The height of the header, or error if unknown"
      },
      "findHeight(bytes32)": {
        "details": "Will fail if the header is unknown",
        "params": {
          "_digest": "The header digest to search for"
        },
        "return": "The height of the header, or error if unknown"
      },
      "getBestKnownDigest()": {
        "details": "This updated only by calling markNewHeaviest",
        "return": "The hash of the best marked chain tip"
      },
      "getCurrentEpochDifficulty()": {
        "details": "This is updated when a new heavist header has a new diff",
        "return": "The difficulty of the bestKnownDigest"
      },
      "getLastReorgCommonAncestor()": {
        "details": "This is updated only by calling markNewHeaviest",
        "return": "The hash of the shared ancestor of the most recent fork"
      },
      "getPrevEpochDifficulty()": {
        "details": "This is updated when a difficulty change is accepted",
        "return": "The difficulty of the previous epoch"
      },
      "getRelayGenesis()": {
        "details": "This is an initialization parameter",
        "return": "The hash of the first block of the relay"
      },
      "getRequest(uint256)": {
        "details": "Requests ids are numerical",
        "params": {
          "_requestID": "The numerical ID of the request"
        },
        "return": "A tuple representation of the request struct"
      },
      "isAncestor(bytes32,bytes32,uint256)": {
        "details": "Limit the amount of lookups (and thus gas usage) with _limit",
        "params": {
          "_ancestor": "The prospective ancestor",
          "_descendant": "The descendant to check",
          "_limit": "The maximum number of blocks to check"
        },
        "return": "true if ancestor is at most limit blocks lower than descendant, otherwise false"
      },
      "markNewHeaviest(bytes32,bytes,bytes,uint256)": {
        "details": "We don't check this AT ALL really. Don't use relays with bad genesis",
        "params": {
          "_ancestor": "The digest of the most recent common ancestor",
          "_currentBest": "The 80-byte header referenced by bestKnownDigest",
          "_limit": "Limit the amount of traversal of the chain",
          "_newBest": "The 80-byte header to mark as the new best"
        },
        "return": "True if successfully updates bestKnownDigest, error otherwise"
      },
      "provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)": {
        "details": "The caller must specify which inputs, which outputs, and which request",
        "params": {
          "_header": "The header containing the merkleroot committing to the tx",
          "_index": "The index of the tx in the merkle tree's leaves",
          "_locktime": "The tx locktime, always the last 4 bytes of the tx",
          "_proof": "The merkle proof intermediate nodes",
          "_reqIndices": "The input and output index to check against the request, packed",
          "_requestID": "The id of the request that has been triggered",
          "_version": "The tx version, always the first 4 bytes of the tx",
          "_vin": "The tx input vector",
          "_vout": "The tx output vector"
        },
        "return": "True if succesful, error otherwise"
      },
      "request(bytes,bytes,uint64,address,uint8,uint256)": {
        "details": "The request can be a spent utxo and/or a created utxo",
        "params": {
          "_consumer": "The address of a ISPVConsumer exposing spv",
          "_notBefore": "A timestamp before which proofs are not accepted",
          "_numConfs": "The minimum number of Bitcoin confirmations to accept",
          "_pays": "An output script that must be paid in acceptable txns (optional)",
          "_paysValue": "A minimum value that must be paid to the output script (optional)",
          "_spends": "An outpoint that must be spent in acceptable txns (optional)"
        },
        "return": "A unique request ID."
      }
    }
  },
  "userdoc": {
    "methods": {
      "addHeaders(bytes,bytes)": {
        "notice": "Adds headers to storage after validating"
      },
      "addHeadersWithRetarget(bytes,bytes,bytes)": {
        "notice": "Adds headers to storage, performs additional validation of retarget"
      },
      "cancelRequest(uint256)": {
        "notice": "Cancel a bitcoin event request."
      },
      "constructor": "Gives a starting point for the relay",
      "findAncestor(bytes32,uint256)": {
        "notice": "Finds an ancestor for a block by its digest"
      },
      "findHeight(bytes32)": {
        "notice": "Finds the height of a header by its digest"
      },
      "getBestKnownDigest()": {
        "notice": "Getter for bestKnownDigest"
      },
      "getCurrentEpochDifficulty()": {
        "notice": "Getter for currentEpochDiff"
      },
      "getLastReorgCommonAncestor()": {
        "notice": "Getter for relayGenesis"
      },
      "getPrevEpochDifficulty()": {
        "notice": "Getter for prevEpochDiff"
      },
      "getRelayGenesis()": {
        "notice": "Getter for relayGenesis"
      },
      "getRequest(uint256)": {
        "notice": "Retrieve info about a request"
      },
      "isAncestor(bytes32,bytes32,uint256)": {
        "notice": "Checks if a digest is an ancestor of the current one"
      },
      "markNewHeaviest(bytes32,bytes,bytes,uint256)": {
        "notice": "Gives a starting point for the relay"
      },
      "provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)": {
        "notice": "Provide a proof of a tx that satisfies some request"
      },
      "request(bytes,bytes,uint64,address,uint8,uint256)": {
        "notice": "Subscribe to a feed of Bitcoin txns matching a request"
      }
    }
  }
}