{
  "contractName": "ERC20Votes",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "fromDelegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "toDelegate",
          "type": "address"
        }
      ],
      "name": "DelegateChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBalance",
          "type": "uint256"
        }
      ],
      "name": "DelegateVotesChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "pos",
          "type": "uint32"
        }
      ],
      "name": "checkpoints",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "fromBlock",
              "type": "uint32"
            },
            {
              "internalType": "uint224",
              "name": "votes",
              "type": "uint224"
            }
          ],
          "internalType": "struct ERC20Votes.Checkpoint",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "numCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "delegates",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPastVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPastTotalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "delegateBySig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\"}],\"name\":\"DelegateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"DelegateVotesChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pos\",\"type\":\"uint32\"}],\"name\":\"checkpoints\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fromBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint224\",\"name\":\"votes\",\"type\":\"uint224\"}],\"internalType\":\"struct ERC20Votes.Checkpoint\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"delegateBySig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getPastTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getPastVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"numCheckpoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's, and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1. NOTE: If exact COMP compatibility is required, use the {ERC20VotesComp} variant of this module. This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting power can be queried through the public accessors {getVotes} and {getPastVotes}. By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked. _Available since v4.2._\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"checkpoints(address,uint32)\":{\"details\":\"Get the `pos`-th checkpoint for `account`.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"delegate(address)\":{\"details\":\"Delegate votes from the sender to `delegatee`.\"},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Delegates votes from signer to `delegatee`\"},\"delegates(address)\":{\"details\":\"Get the address `account` is currently delegating to.\"},\"getPastTotalSupply(uint256)\":{\"details\":\"Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances. It is but NOT the sum of all the delegated votes! Requirements: - `blockNumber` must have been already mined\"},\"getPastVotes(address,uint256)\":{\"details\":\"Retrieve the number of votes for `account` at the end of `blockNumber`. Requirements: - `blockNumber` must have been already mined\"},\"getVotes(address)\":{\"details\":\"Gets the current votes balance for `account`\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"numCheckpoints(address)\":{\"details\":\"Get number of checkpoints for `account`.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol\":\"ERC20Votes\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/governance/utils/IVotes.sol\":{\"keccak256\":\"0xf5324a55ee9c0b4a840ea57c055ac9d046f88986ceef567e1cf68113e46a79c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f41fe2bddc33c17ccccfc25379b1869354e9ee62d8b28d2acc95229eeba37a86\",\"dweb:/ipfs/Qmb6SF2XL2uSvH6k5JSjtx4Xoqz41ACkhdAhtbW1Yh3RiY\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xdadd41acb749920eccf40aeaa8d291adf9751399a7343561bad13e7a8d99be0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://12af4ac016f9fdf3be5d15824f4292272aa11f6b2e0192a0f7320f5ad49bbbf0\",\"dweb:/ipfs/QmRXMpdqCgA3TYuYxBodqs5p9jGbnMW6xa2gvjppvq4TWk\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87a7a5d2f6f63f84598af02b8c50ca2df2631cb8ba2453e8d95fcb17e4be9824\",\"dweb:/ipfs/QmR76hqtAcRqoFj33tmNjcWTLrgNsAaakYwnKZ8zoJtKei\"]},\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol\":{\"keccak256\":\"0x7fd2492be0468be4662081ee25cde38a31e4a0ceca0fed10160462389013910f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://10c660ba772feee0fcb29319b15b328b429cd020079786e8d00992159f4b7b4e\",\"dweb:/ipfs/QmTjnb1FLbjHkgSZ7qcRZnNSwmZnobBpkJ9UWSc1SkVqhU\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol\":{\"keccak256\":\"0x8a763ef5625e97f5287c7ddd5ede434129069e15d83bf0a68ad10a5e56ccb439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a3f75a7be83ce0fb636d3835e43348243d4ced9df08fb9ab6cf879ccf4d81b7\",\"dweb:/ipfs/QmauKgQQthadf1DLEbfkDWwNGcJ1doRH21EXSuacSDWGWt\"]},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e1c62884d55b70f3ae5432b44bb3166ad71ae3acd19c57ab6ddc3c87c325ee\",\"dweb:/ipfs/QmezuXg5GK5oeA4F91EZhozBFekhq5TD966bHPH18cCqhu\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x3c07f43e60e099b3b157243b3152722e73b80eeb7985c2cd73712828d7f7da29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://466ffb5a6e3bd65fffd996f9287ffd240ea21588a338c6efe143d94eaed014a7\",\"dweb:/ipfs/Qmans3vvPJZcvxe9KLAPc9Xwe4TFVTJdzaQGpi62Vrhoe2\"]},\"@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol\":{\"keccak256\":\"0x6688fad58b9ec0286d40fa957152e575d5d8bd4c3aa80985efdb11b44f776ae7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8bc00ab7f133cdaafd212a5cc6a16c8d37319721105d130c8e5af0c4e8f170ba\",\"dweb:/ipfs/QmVmf6LVMfFiEkvKYLzSv3bGHzymEW93AcUuFrNUdY3NtT\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc995bddbca1ae19788db9f8b61e63385edd3fddf89693b612d5abd1a275974d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab84f13e6e6e0823854a0cddd49e96df052092d5919f95587607f0ed28a64cb6\",\"dweb:/ipfs/QmbNtqAq23ZDjCzHukQaa7B3y6rcobscm6FZF5PMQXcnVr\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x5c6caab697d302ad7eb59c234a4d2dbc965c1bae87709bd2850060b7695b28c7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb62abcee612c175f1b9bc70e5dfe5bd23473c99987ade6e80e291f68dc60ff1\",\"dweb:/ipfs/QmZCMajhG7FtRYNDwBchXN89mXR6HLPVzr9732qfUdNf9E\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Votes.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./draft-ERC20Permit.sol\";\nimport \"../../../utils/math/Math.sol\";\nimport \"../../../governance/utils/IVotes.sol\";\nimport \"../../../utils/math/SafeCast.sol\";\nimport \"../../../utils/cryptography/ECDSA.sol\";\n\n/**\n * @dev Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's,\n * and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1.\n *\n * NOTE: If exact COMP compatibility is required, use the {ERC20VotesComp} variant of this module.\n *\n * This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either\n * by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting\n * power can be queried through the public accessors {getVotes} and {getPastVotes}.\n *\n * By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it\n * requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.\n *\n * _Available since v4.2._\n */\nabstract contract ERC20Votes is IVotes, ERC20Permit {\n    struct Checkpoint {\n        uint32 fromBlock;\n        uint224 votes;\n    }\n\n    bytes32 private constant _DELEGATION_TYPEHASH =\n        keccak256(\"Delegation(address delegatee,uint256 nonce,uint256 expiry)\");\n\n    mapping(address => address) private _delegates;\n    mapping(address => Checkpoint[]) private _checkpoints;\n    Checkpoint[] private _totalSupplyCheckpoints;\n\n    /**\n     * @dev Get the `pos`-th checkpoint for `account`.\n     */\n    function checkpoints(address account, uint32 pos) public view virtual returns (Checkpoint memory) {\n        return _checkpoints[account][pos];\n    }\n\n    /**\n     * @dev Get number of checkpoints for `account`.\n     */\n    function numCheckpoints(address account) public view virtual returns (uint32) {\n        return SafeCast.toUint32(_checkpoints[account].length);\n    }\n\n    /**\n     * @dev Get the address `account` is currently delegating to.\n     */\n    function delegates(address account) public view virtual override returns (address) {\n        return _delegates[account];\n    }\n\n    /**\n     * @dev Gets the current votes balance for `account`\n     */\n    function getVotes(address account) public view virtual override returns (uint256) {\n        uint256 pos = _checkpoints[account].length;\n        return pos == 0 ? 0 : _checkpoints[account][pos - 1].votes;\n    }\n\n    /**\n     * @dev Retrieve the number of votes for `account` at the end of `blockNumber`.\n     *\n     * Requirements:\n     *\n     * - `blockNumber` must have been already mined\n     */\n    function getPastVotes(address account, uint256 blockNumber) public view virtual override returns (uint256) {\n        require(blockNumber < block.number, \"ERC20Votes: block not yet mined\");\n        return _checkpointsLookup(_checkpoints[account], blockNumber);\n    }\n\n    /**\n     * @dev Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances.\n     * It is but NOT the sum of all the delegated votes!\n     *\n     * Requirements:\n     *\n     * - `blockNumber` must have been already mined\n     */\n    function getPastTotalSupply(uint256 blockNumber) public view virtual override returns (uint256) {\n        require(blockNumber < block.number, \"ERC20Votes: block not yet mined\");\n        return _checkpointsLookup(_totalSupplyCheckpoints, blockNumber);\n    }\n\n    /**\n     * @dev Lookup a value in a list of (sorted) checkpoints.\n     */\n    function _checkpointsLookup(Checkpoint[] storage ckpts, uint256 blockNumber) private view returns (uint256) {\n        // We run a binary search to look for the earliest checkpoint taken after `blockNumber`.\n        //\n        // During the loop, the index of the wanted checkpoint remains in the range [low-1, high).\n        // With each iteration, either `low` or `high` is moved towards the middle of the range to maintain the invariant.\n        // - If the middle checkpoint is after `blockNumber`, we look in [low, mid)\n        // - If the middle checkpoint is before or equal to `blockNumber`, we look in [mid+1, high)\n        // Once we reach a single value (when low == high), we've found the right checkpoint at the index high-1, if not\n        // out of bounds (in which case we're looking too far in the past and the result is 0).\n        // Note that if the latest checkpoint available is exactly for `blockNumber`, we end up with an index that is\n        // past the end of the array, so we technically don't find a checkpoint after `blockNumber`, but it works out\n        // the same.\n        uint256 high = ckpts.length;\n        uint256 low = 0;\n        while (low < high) {\n            uint256 mid = Math.average(low, high);\n            if (ckpts[mid].fromBlock > blockNumber) {\n                high = mid;\n            } else {\n                low = mid + 1;\n            }\n        }\n\n        return high == 0 ? 0 : ckpts[high - 1].votes;\n    }\n\n    /**\n     * @dev Delegate votes from the sender to `delegatee`.\n     */\n    function delegate(address delegatee) public virtual override {\n        _delegate(_msgSender(), delegatee);\n    }\n\n    /**\n     * @dev Delegates votes from signer to `delegatee`\n     */\n    function delegateBySig(\n        address delegatee,\n        uint256 nonce,\n        uint256 expiry,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) public virtual override {\n        require(block.timestamp <= expiry, \"ERC20Votes: signature expired\");\n        address signer = ECDSA.recover(\n            _hashTypedDataV4(keccak256(abi.encode(_DELEGATION_TYPEHASH, delegatee, nonce, expiry))),\n            v,\n            r,\n            s\n        );\n        require(nonce == _useNonce(signer), \"ERC20Votes: invalid nonce\");\n        _delegate(signer, delegatee);\n    }\n\n    /**\n     * @dev Maximum token supply. Defaults to `type(uint224).max` (2^224^ - 1).\n     */\n    function _maxSupply() internal view virtual returns (uint224) {\n        return type(uint224).max;\n    }\n\n    /**\n     * @dev Snapshots the totalSupply after it has been increased.\n     */\n    function _mint(address account, uint256 amount) internal virtual override {\n        super._mint(account, amount);\n        require(totalSupply() <= _maxSupply(), \"ERC20Votes: total supply risks overflowing votes\");\n\n        _writeCheckpoint(_totalSupplyCheckpoints, _add, amount);\n    }\n\n    /**\n     * @dev Snapshots the totalSupply after it has been decreased.\n     */\n    function _burn(address account, uint256 amount) internal virtual override {\n        super._burn(account, amount);\n\n        _writeCheckpoint(_totalSupplyCheckpoints, _subtract, amount);\n    }\n\n    /**\n     * @dev Move voting power when tokens are transferred.\n     *\n     * Emits a {DelegateVotesChanged} event.\n     */\n    function _afterTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual override {\n        super._afterTokenTransfer(from, to, amount);\n\n        _moveVotingPower(delegates(from), delegates(to), amount);\n    }\n\n    /**\n     * @dev Change delegation for `delegator` to `delegatee`.\n     *\n     * Emits events {DelegateChanged} and {DelegateVotesChanged}.\n     */\n    function _delegate(address delegator, address delegatee) internal virtual {\n        address currentDelegate = delegates(delegator);\n        uint256 delegatorBalance = balanceOf(delegator);\n        _delegates[delegator] = delegatee;\n\n        emit DelegateChanged(delegator, currentDelegate, delegatee);\n\n        _moveVotingPower(currentDelegate, delegatee, delegatorBalance);\n    }\n\n    function _moveVotingPower(\n        address src,\n        address dst,\n        uint256 amount\n    ) private {\n        if (src != dst && amount > 0) {\n            if (src != address(0)) {\n                (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint(_checkpoints[src], _subtract, amount);\n                emit DelegateVotesChanged(src, oldWeight, newWeight);\n            }\n\n            if (dst != address(0)) {\n                (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint(_checkpoints[dst], _add, amount);\n                emit DelegateVotesChanged(dst, oldWeight, newWeight);\n            }\n        }\n    }\n\n    function _writeCheckpoint(\n        Checkpoint[] storage ckpts,\n        function(uint256, uint256) view returns (uint256) op,\n        uint256 delta\n    ) private returns (uint256 oldWeight, uint256 newWeight) {\n        uint256 pos = ckpts.length;\n        oldWeight = pos == 0 ? 0 : ckpts[pos - 1].votes;\n        newWeight = op(oldWeight, delta);\n\n        if (pos > 0 && ckpts[pos - 1].fromBlock == block.number) {\n            ckpts[pos - 1].votes = SafeCast.toUint224(newWeight);\n        } else {\n            ckpts.push(Checkpoint({fromBlock: SafeCast.toUint32(block.number), votes: SafeCast.toUint224(newWeight)}));\n        }\n    }\n\n    function _add(uint256 a, uint256 b) private pure returns (uint256) {\n        return a + b;\n    }\n\n    function _subtract(uint256 a, uint256 b) private pure returns (uint256) {\n        return a - b;\n    }\n}\n",
  "sourcePath": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol",
  "ast": {
    "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol",
    "exportedSymbols": {
      "Context": [
        5297
      ],
      "Counters": [
        5371
      ],
      "ECDSA": [
        5981
      ],
      "EIP712": [
        6228
      ],
      "ERC20": [
        2806
      ],
      "ERC20Permit": [
        3759
      ],
      "ERC20Votes": [
        3565
      ],
      "IERC20": [
        2884
      ],
      "IERC20Metadata": [
        3590
      ],
      "IERC20Permit": [
        3795
      ],
      "IVotes": [
        610
      ],
      "Math": [
        6352
      ],
      "SafeCast": [
        6745
      ],
      "Strings": [
        5574
      ]
    },
    "id": 3566,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2930,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "121:23:16"
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol",
        "file": "./draft-ERC20Permit.sol",
        "id": 2931,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3566,
        "sourceUnit": 3760,
        "src": "146:33:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
        "file": "../../../utils/math/Math.sol",
        "id": 2932,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3566,
        "sourceUnit": 6353,
        "src": "180:38:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/governance/utils/IVotes.sol",
        "file": "../../../governance/utils/IVotes.sol",
        "id": 2933,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3566,
        "sourceUnit": 611,
        "src": "219:46:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
        "file": "../../../utils/math/SafeCast.sol",
        "id": 2934,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3566,
        "sourceUnit": 6746,
        "src": "266:42:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
        "file": "../../../utils/cryptography/ECDSA.sol",
        "id": 2935,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3566,
        "sourceUnit": 5982,
        "src": "309:47:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 2937,
              "name": "IVotes",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 610,
              "src": "1285:6:16"
            },
            "id": 2938,
            "nodeType": "InheritanceSpecifier",
            "src": "1285:6:16"
          },
          {
            "baseName": {
              "id": 2939,
              "name": "ERC20Permit",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3759,
              "src": "1293:11:16"
            },
            "id": 2940,
            "nodeType": "InheritanceSpecifier",
            "src": "1293:11:16"
          }
        ],
        "canonicalName": "ERC20Votes",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 2936,
          "nodeType": "StructuredDocumentation",
          "src": "358:894:16",
          "text": " @dev Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's,\n and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1.\n NOTE: If exact COMP compatibility is required, use the {ERC20VotesComp} variant of this module.\n This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either\n by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting\n power can be queried through the public accessors {getVotes} and {getPastVotes}.\n By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it\n requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.\n _Available since v4.2._"
        },
        "fullyImplemented": false,
        "id": 3565,
        "linearizedBaseContracts": [
          3565,
          3759,
          6228,
          3795,
          2806,
          3590,
          2884,
          5297,
          610
        ],
        "name": "ERC20Votes",
        "nameLocation": "1271:10:16",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ERC20Votes.Checkpoint",
            "id": 2945,
            "members": [
              {
                "constant": false,
                "id": 2942,
                "mutability": "mutable",
                "name": "fromBlock",
                "nameLocation": "1346:9:16",
                "nodeType": "VariableDeclaration",
                "scope": 2945,
                "src": "1339:16:16",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 2941,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1339:6:16",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2944,
                "mutability": "mutable",
                "name": "votes",
                "nameLocation": "1373:5:16",
                "nodeType": "VariableDeclaration",
                "scope": 2945,
                "src": "1365:13:16",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint224",
                  "typeString": "uint224"
                },
                "typeName": {
                  "id": 2943,
                  "name": "uint224",
                  "nodeType": "ElementaryTypeName",
                  "src": "1365:7:16",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint224",
                    "typeString": "uint224"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Checkpoint",
            "nameLocation": "1318:10:16",
            "nodeType": "StructDefinition",
            "scope": 3565,
            "src": "1311:74:16",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 2950,
            "mutability": "constant",
            "name": "_DELEGATION_TYPEHASH",
            "nameLocation": "1416:20:16",
            "nodeType": "VariableDeclaration",
            "scope": 3565,
            "src": "1391:127:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 2946,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1391:7:16",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "44656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e743235362065787069727929",
                  "id": 2948,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1457:60:16",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_e48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf",
                    "typeString": "literal_string \"Delegation(address delegatee,uint256 nonce,uint256 expiry)\""
                  },
                  "value": "Delegation(address delegatee,uint256 nonce,uint256 expiry)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_e48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf",
                    "typeString": "literal_string \"Delegation(address delegatee,uint256 nonce,uint256 expiry)\""
                  }
                ],
                "id": 2947,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "1447:9:16",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 2949,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1447:71:16",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 2954,
            "mutability": "mutable",
            "name": "_delegates",
            "nameLocation": "1561:10:16",
            "nodeType": "VariableDeclaration",
            "scope": 3565,
            "src": "1525:46:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
              "typeString": "mapping(address => address)"
            },
            "typeName": {
              "id": 2953,
              "keyType": {
                "id": 2951,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1533:7:16",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1525:27:16",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                "typeString": "mapping(address => address)"
              },
              "valueType": {
                "id": 2952,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1544:7:16",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 2960,
            "mutability": "mutable",
            "name": "_checkpoints",
            "nameLocation": "1618:12:16",
            "nodeType": "VariableDeclaration",
            "scope": 3565,
            "src": "1577:53:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
              "typeString": "mapping(address => struct ERC20Votes.Checkpoint[])"
            },
            "typeName": {
              "id": 2959,
              "keyType": {
                "id": 2955,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1585:7:16",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1577:32:16",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                "typeString": "mapping(address => struct ERC20Votes.Checkpoint[])"
              },
              "valueType": {
                "baseType": {
                  "id": 2957,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 2956,
                    "name": "Checkpoint",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2945,
                    "src": "1596:10:16"
                  },
                  "referencedDeclaration": 2945,
                  "src": "1596:10:16",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Checkpoint_$2945_storage_ptr",
                    "typeString": "struct ERC20Votes.Checkpoint"
                  }
                },
                "id": 2958,
                "nodeType": "ArrayTypeName",
                "src": "1596:12:16",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                  "typeString": "struct ERC20Votes.Checkpoint[]"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 2964,
            "mutability": "mutable",
            "name": "_totalSupplyCheckpoints",
            "nameLocation": "1657:23:16",
            "nodeType": "VariableDeclaration",
            "scope": 3565,
            "src": "1636:44:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
              "typeString": "struct ERC20Votes.Checkpoint[]"
            },
            "typeName": {
              "baseType": {
                "id": 2962,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 2961,
                  "name": "Checkpoint",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2945,
                  "src": "1636:10:16"
                },
                "referencedDeclaration": 2945,
                "src": "1636:10:16",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Checkpoint_$2945_storage_ptr",
                  "typeString": "struct ERC20Votes.Checkpoint"
                }
              },
              "id": 2963,
              "nodeType": "ArrayTypeName",
              "src": "1636:12:16",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                "typeString": "struct ERC20Votes.Checkpoint[]"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 2981,
              "nodeType": "Block",
              "src": "1856:50:16",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 2975,
                        "name": "_checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2960,
                        "src": "1873:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                          "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                        }
                      },
                      "id": 2977,
                      "indexExpression": {
                        "id": 2976,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2967,
                        "src": "1886:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1873:21:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                        "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                      }
                    },
                    "id": 2979,
                    "indexExpression": {
                      "id": 2978,
                      "name": "pos",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2969,
                      "src": "1895:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1873:26:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                      "typeString": "struct ERC20Votes.Checkpoint storage ref"
                    }
                  },
                  "functionReturnParameters": 2974,
                  "id": 2980,
                  "nodeType": "Return",
                  "src": "1866:33:16"
                }
              ]
            },
            "documentation": {
              "id": 2965,
              "nodeType": "StructuredDocumentation",
              "src": "1687:66:16",
              "text": " @dev Get the `pos`-th checkpoint for `account`."
            },
            "functionSelector": "f1127ed8",
            "id": 2982,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkpoints",
            "nameLocation": "1767:11:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2970,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2967,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "1787:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 2982,
                  "src": "1779:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1779:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2969,
                  "mutability": "mutable",
                  "name": "pos",
                  "nameLocation": "1803:3:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 2982,
                  "src": "1796:10:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 2968,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1796:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1778:29:16"
            },
            "returnParameters": {
              "id": 2974,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2973,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 2982,
                  "src": "1837:17:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Checkpoint_$2945_memory_ptr",
                    "typeString": "struct ERC20Votes.Checkpoint"
                  },
                  "typeName": {
                    "id": 2972,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2971,
                      "name": "Checkpoint",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2945,
                      "src": "1837:10:16"
                    },
                    "referencedDeclaration": 2945,
                    "src": "1837:10:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Checkpoint_$2945_storage_ptr",
                      "typeString": "struct ERC20Votes.Checkpoint"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1836:19:16"
            },
            "scope": 3565,
            "src": "1758:148:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2998,
              "nodeType": "Block",
              "src": "2059:71:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 2992,
                            "name": "_checkpoints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2960,
                            "src": "2094:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                              "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                            }
                          },
                          "id": 2994,
                          "indexExpression": {
                            "id": 2993,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2985,
                            "src": "2107:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2094:21:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                            "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                          }
                        },
                        "id": 2995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "2094:28:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 2990,
                        "name": "SafeCast",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6745,
                        "src": "2076:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SafeCast_$6745_$",
                          "typeString": "type(library SafeCast)"
                        }
                      },
                      "id": 2991,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toUint32",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6480,
                      "src": "2076:17:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$",
                        "typeString": "function (uint256) pure returns (uint32)"
                      }
                    },
                    "id": 2996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2076:47:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 2989,
                  "id": 2997,
                  "nodeType": "Return",
                  "src": "2069:54:16"
                }
              ]
            },
            "documentation": {
              "id": 2983,
              "nodeType": "StructuredDocumentation",
              "src": "1912:64:16",
              "text": " @dev Get number of checkpoints for `account`."
            },
            "functionSelector": "6fcfff45",
            "id": 2999,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "numCheckpoints",
            "nameLocation": "1990:14:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2985,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "2013:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 2999,
                  "src": "2005:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2984,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2005:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2004:17:16"
            },
            "returnParameters": {
              "id": 2989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2988,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 2999,
                  "src": "2051:6:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 2987,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2051:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2050:8:16"
            },
            "scope": 3565,
            "src": "1981:149:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              587
            ],
            "body": {
              "id": 3012,
              "nodeType": "Block",
              "src": "2301:43:16",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 3008,
                      "name": "_delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2954,
                      "src": "2318:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 3010,
                    "indexExpression": {
                      "id": 3009,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3002,
                      "src": "2329:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2318:19:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3007,
                  "id": 3011,
                  "nodeType": "Return",
                  "src": "2311:26:16"
                }
              ]
            },
            "documentation": {
              "id": 3000,
              "nodeType": "StructuredDocumentation",
              "src": "2136:77:16",
              "text": " @dev Get the address `account` is currently delegating to."
            },
            "functionSelector": "587cde1e",
            "id": 3013,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegates",
            "nameLocation": "2227:9:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3004,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2274:8:16"
            },
            "parameters": {
              "id": 3003,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3002,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "2245:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3013,
                  "src": "2237:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3001,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2237:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2236:17:16"
            },
            "returnParameters": {
              "id": 3007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3006,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3013,
                  "src": "2292:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3005,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2292:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2291:9:16"
            },
            "scope": 3565,
            "src": "2218:126:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              561
            ],
            "body": {
              "id": 3043,
              "nodeType": "Block",
              "src": "2505:127:16",
              "statements": [
                {
                  "assignments": [
                    3023
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3023,
                      "mutability": "mutable",
                      "name": "pos",
                      "nameLocation": "2523:3:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3043,
                      "src": "2515:11:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3022,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2515:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3028,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 3024,
                        "name": "_checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2960,
                        "src": "2529:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                          "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                        }
                      },
                      "id": 3026,
                      "indexExpression": {
                        "id": 3025,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3016,
                        "src": "2542:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2529:21:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                        "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                      }
                    },
                    "id": 3027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "2529:28:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2515:42:16"
                },
                {
                  "expression": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3031,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3029,
                        "name": "pos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3023,
                        "src": "2574:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 3030,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2581:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2574:8:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 3033,
                            "name": "_checkpoints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2960,
                            "src": "2589:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                              "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                            }
                          },
                          "id": 3035,
                          "indexExpression": {
                            "id": 3034,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3016,
                            "src": "2602:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2589:21:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                            "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                          }
                        },
                        "id": 3039,
                        "indexExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3038,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3036,
                            "name": "pos",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3023,
                            "src": "2611:3:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 3037,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2617:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "2611:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2589:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref"
                        }
                      },
                      "id": 3040,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "votes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2944,
                      "src": "2589:36:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "id": 3041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "2574:51:16",
                    "trueExpression": {
                      "hexValue": "30",
                      "id": 3032,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2585:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "functionReturnParameters": 3021,
                  "id": 3042,
                  "nodeType": "Return",
                  "src": "2567:58:16"
                }
              ]
            },
            "documentation": {
              "id": 3014,
              "nodeType": "StructuredDocumentation",
              "src": "2350:68:16",
              "text": " @dev Gets the current votes balance for `account`"
            },
            "functionSelector": "9ab24eb0",
            "id": 3044,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVotes",
            "nameLocation": "2432:8:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3018,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2478:8:16"
            },
            "parameters": {
              "id": 3017,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3016,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "2449:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3044,
                  "src": "2441:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3015,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2441:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2440:17:16"
            },
            "returnParameters": {
              "id": 3021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3020,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3044,
                  "src": "2496:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2496:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2495:9:16"
            },
            "scope": 3565,
            "src": "2423:209:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              571
            ],
            "body": {
              "id": 3070,
              "nodeType": "Block",
              "src": "2932:158:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3059,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3056,
                          "name": "blockNumber",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3049,
                          "src": "2950:11:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "expression": {
                            "id": 3057,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967292,
                            "src": "2964:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 3058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "src": "2964:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2950:26:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564",
                        "id": 3060,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2978:33:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_06e5bbaaa109e1d058e1026fbdce9ec5e51f304d46ad524d922a17511e41fd0d",
                          "typeString": "literal_string \"ERC20Votes: block not yet mined\""
                        },
                        "value": "ERC20Votes: block not yet mined"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_06e5bbaaa109e1d058e1026fbdce9ec5e51f304d46ad524d922a17511e41fd0d",
                          "typeString": "literal_string \"ERC20Votes: block not yet mined\""
                        }
                      ],
                      "id": 3055,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2942:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2942:70:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3062,
                  "nodeType": "ExpressionStatement",
                  "src": "2942:70:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 3064,
                          "name": "_checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2960,
                          "src": "3048:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 3066,
                        "indexExpression": {
                          "id": 3065,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3047,
                          "src": "3061:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3048:21:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "id": 3067,
                        "name": "blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3049,
                        "src": "3071:11:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3063,
                      "name": "_checkpointsLookup",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3160,
                      "src": "3029:18:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 3068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3029:54:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3054,
                  "id": 3069,
                  "nodeType": "Return",
                  "src": "3022:61:16"
                }
              ]
            },
            "documentation": {
              "id": 3045,
              "nodeType": "StructuredDocumentation",
              "src": "2638:182:16",
              "text": " @dev Retrieve the number of votes for `account` at the end of `blockNumber`.\n Requirements:\n - `blockNumber` must have been already mined"
            },
            "functionSelector": "3a46b1a8",
            "id": 3071,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPastVotes",
            "nameLocation": "2834:12:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3051,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2905:8:16"
            },
            "parameters": {
              "id": 3050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3047,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "2855:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3071,
                  "src": "2847:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3046,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2847:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3049,
                  "mutability": "mutable",
                  "name": "blockNumber",
                  "nameLocation": "2872:11:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3071,
                  "src": "2864:19:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3048,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2864:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2846:38:16"
            },
            "returnParameters": {
              "id": 3054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3053,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3071,
                  "src": "2923:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3052,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2923:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2922:9:16"
            },
            "scope": 3565,
            "src": "2825:265:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              579
            ],
            "body": {
              "id": 3093,
              "nodeType": "Block",
              "src": "3465:160:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3084,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3081,
                          "name": "blockNumber",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3074,
                          "src": "3483:11:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "expression": {
                            "id": 3082,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967292,
                            "src": "3497:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 3083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "src": "3497:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3483:26:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564",
                        "id": 3085,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3511:33:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_06e5bbaaa109e1d058e1026fbdce9ec5e51f304d46ad524d922a17511e41fd0d",
                          "typeString": "literal_string \"ERC20Votes: block not yet mined\""
                        },
                        "value": "ERC20Votes: block not yet mined"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_06e5bbaaa109e1d058e1026fbdce9ec5e51f304d46ad524d922a17511e41fd0d",
                          "typeString": "literal_string \"ERC20Votes: block not yet mined\""
                        }
                      ],
                      "id": 3080,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3475:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3475:70:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3087,
                  "nodeType": "ExpressionStatement",
                  "src": "3475:70:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3089,
                        "name": "_totalSupplyCheckpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2964,
                        "src": "3581:23:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "id": 3090,
                        "name": "blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3074,
                        "src": "3606:11:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3088,
                      "name": "_checkpointsLookup",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3160,
                      "src": "3562:18:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 3091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3562:56:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3079,
                  "id": 3092,
                  "nodeType": "Return",
                  "src": "3555:63:16"
                }
              ]
            },
            "documentation": {
              "id": 3072,
              "nodeType": "StructuredDocumentation",
              "src": "3096:268:16",
              "text": " @dev Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances.\n It is but NOT the sum of all the delegated votes!\n Requirements:\n - `blockNumber` must have been already mined"
            },
            "functionSelector": "8e539e8c",
            "id": 3094,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPastTotalSupply",
            "nameLocation": "3378:18:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3076,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3438:8:16"
            },
            "parameters": {
              "id": 3075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3074,
                  "mutability": "mutable",
                  "name": "blockNumber",
                  "nameLocation": "3405:11:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3094,
                  "src": "3397:19:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3073,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3397:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3396:21:16"
            },
            "returnParameters": {
              "id": 3079,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3078,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3094,
                  "src": "3456:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3077,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3456:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3455:9:16"
            },
            "scope": 3565,
            "src": "3369:256:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3159,
              "nodeType": "Block",
              "src": "3817:1350:16",
              "statements": [
                {
                  "assignments": [
                    3107
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3107,
                      "mutability": "mutable",
                      "name": "high",
                      "nameLocation": "4823:4:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3159,
                      "src": "4815:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3106,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4815:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3110,
                  "initialValue": {
                    "expression": {
                      "id": 3108,
                      "name": "ckpts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3099,
                      "src": "4830:5:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                        "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                      }
                    },
                    "id": 3109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "4830:12:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4815:27:16"
                },
                {
                  "assignments": [
                    3112
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3112,
                      "mutability": "mutable",
                      "name": "low",
                      "nameLocation": "4860:3:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3159,
                      "src": "4852:11:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3111,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4852:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3114,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 3113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4866:1:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4852:15:16"
                },
                {
                  "body": {
                    "id": 3145,
                    "nodeType": "Block",
                    "src": "4896:210:16",
                    "statements": [
                      {
                        "assignments": [
                          3119
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3119,
                            "mutability": "mutable",
                            "name": "mid",
                            "nameLocation": "4918:3:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3145,
                            "src": "4910:11:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3118,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4910:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3125,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3122,
                              "name": "low",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3112,
                              "src": "4937:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3123,
                              "name": "high",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3107,
                              "src": "4942:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 3120,
                              "name": "Math",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6352,
                              "src": "4924:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Math_$6352_$",
                                "typeString": "type(library Math)"
                              }
                            },
                            "id": 3121,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "average",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6326,
                            "src": "4924:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 3124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4924:23:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4910:37:16"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3131,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 3126,
                                "name": "ckpts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3099,
                                "src": "4965:5:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                                  "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 3128,
                              "indexExpression": {
                                "id": 3127,
                                "name": "mid",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3119,
                                "src": "4971:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4965:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                                "typeString": "struct ERC20Votes.Checkpoint storage ref"
                              }
                            },
                            "id": 3129,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2942,
                            "src": "4965:20:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 3130,
                            "name": "blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3101,
                            "src": "4988:11:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4965:34:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 3143,
                          "nodeType": "Block",
                          "src": "5050:46:16",
                          "statements": [
                            {
                              "expression": {
                                "id": 3141,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3137,
                                  "name": "low",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3112,
                                  "src": "5068:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3140,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3138,
                                    "name": "mid",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3119,
                                    "src": "5074:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 3139,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5080:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "5074:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5068:13:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3142,
                              "nodeType": "ExpressionStatement",
                              "src": "5068:13:16"
                            }
                          ]
                        },
                        "id": 3144,
                        "nodeType": "IfStatement",
                        "src": "4961:135:16",
                        "trueBody": {
                          "id": 3136,
                          "nodeType": "Block",
                          "src": "5001:43:16",
                          "statements": [
                            {
                              "expression": {
                                "id": 3134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3132,
                                  "name": "high",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3107,
                                  "src": "5019:4:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 3133,
                                  "name": "mid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3119,
                                  "src": "5026:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5019:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3135,
                              "nodeType": "ExpressionStatement",
                              "src": "5019:10:16"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3115,
                      "name": "low",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3112,
                      "src": "4884:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 3116,
                      "name": "high",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3107,
                      "src": "4890:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4884:10:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3146,
                  "nodeType": "WhileStatement",
                  "src": "4877:229:16"
                },
                {
                  "expression": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3147,
                        "name": "high",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3107,
                        "src": "5123:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 3148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5131:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5123:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 3151,
                          "name": "ckpts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3099,
                          "src": "5139:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                            "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 3155,
                        "indexExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3154,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3152,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3107,
                            "src": "5145:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 3153,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5152:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "5145:8:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5139:15:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref"
                        }
                      },
                      "id": 3156,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "votes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2944,
                      "src": "5139:21:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "id": 3157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5123:37:16",
                    "trueExpression": {
                      "hexValue": "30",
                      "id": 3150,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5135:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "functionReturnParameters": 3105,
                  "id": 3158,
                  "nodeType": "Return",
                  "src": "5116:44:16"
                }
              ]
            },
            "documentation": {
              "id": 3095,
              "nodeType": "StructuredDocumentation",
              "src": "3631:73:16",
              "text": " @dev Lookup a value in a list of (sorted) checkpoints."
            },
            "id": 3160,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkpointsLookup",
            "nameLocation": "3718:18:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3102,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3099,
                  "mutability": "mutable",
                  "name": "ckpts",
                  "nameLocation": "3758:5:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3160,
                  "src": "3737:26:16",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                    "typeString": "struct ERC20Votes.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3097,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 3096,
                        "name": "Checkpoint",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2945,
                        "src": "3737:10:16"
                      },
                      "referencedDeclaration": 2945,
                      "src": "3737:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$2945_storage_ptr",
                        "typeString": "struct ERC20Votes.Checkpoint"
                      }
                    },
                    "id": 3098,
                    "nodeType": "ArrayTypeName",
                    "src": "3737:12:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                      "typeString": "struct ERC20Votes.Checkpoint[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3101,
                  "mutability": "mutable",
                  "name": "blockNumber",
                  "nameLocation": "3773:11:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3160,
                  "src": "3765:19:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3100,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3765:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3736:49:16"
            },
            "returnParameters": {
              "id": 3105,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3104,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3160,
                  "src": "3808:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3103,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3808:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3807:9:16"
            },
            "scope": 3565,
            "src": "3709:1458:16",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              593
            ],
            "body": {
              "id": 3173,
              "nodeType": "Block",
              "src": "5309:51:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3168,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5287,
                          "src": "5329:10:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 3169,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5329:12:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3170,
                        "name": "delegatee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3163,
                        "src": "5343:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3167,
                      "name": "_delegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3371,
                      "src": "5319:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5319:34:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3172,
                  "nodeType": "ExpressionStatement",
                  "src": "5319:34:16"
                }
              ]
            },
            "documentation": {
              "id": 3161,
              "nodeType": "StructuredDocumentation",
              "src": "5173:70:16",
              "text": " @dev Delegate votes from the sender to `delegatee`."
            },
            "functionSelector": "5c19a95c",
            "id": 3174,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegate",
            "nameLocation": "5257:8:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3165,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5300:8:16"
            },
            "parameters": {
              "id": 3164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3163,
                  "mutability": "mutable",
                  "name": "delegatee",
                  "nameLocation": "5274:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3174,
                  "src": "5266:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3162,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5266:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5265:19:16"
            },
            "returnParameters": {
              "id": 3166,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5309:0:16"
            },
            "scope": 3565,
            "src": "5248:112:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              609
            ],
            "body": {
              "id": 3233,
              "nodeType": "Block",
              "src": "5619:392:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3195,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 3192,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967292,
                            "src": "5637:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 3193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "5637:15:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 3194,
                          "name": "expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3181,
                          "src": "5656:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5637:25:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230566f7465733a207369676e61747572652065787069726564",
                        "id": 3196,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5664:31:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_136d0f69bc85a5c125b5cc368e2880ebdb3c89d4d9828f6476431c386ea60257",
                          "typeString": "literal_string \"ERC20Votes: signature expired\""
                        },
                        "value": "ERC20Votes: signature expired"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_136d0f69bc85a5c125b5cc368e2880ebdb3c89d4d9828f6476431c386ea60257",
                          "typeString": "literal_string \"ERC20Votes: signature expired\""
                        }
                      ],
                      "id": 3191,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5629:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3197,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5629:67:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3198,
                  "nodeType": "ExpressionStatement",
                  "src": "5629:67:16"
                },
                {
                  "assignments": [
                    3200
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3200,
                      "mutability": "mutable",
                      "name": "signer",
                      "nameLocation": "5714:6:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3233,
                      "src": "5706:14:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3199,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5706:7:16",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3218,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 3207,
                                    "name": "_DELEGATION_TYPEHASH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2950,
                                    "src": "5788:20:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "id": 3208,
                                    "name": "delegatee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3177,
                                    "src": "5810:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3209,
                                    "name": "nonce",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3179,
                                    "src": "5821:5:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 3210,
                                    "name": "expiry",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3181,
                                    "src": "5828:6:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 3205,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967295,
                                    "src": "5777:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 3206,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encode",
                                  "nodeType": "MemberAccess",
                                  "src": "5777:10:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 3211,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5777:58:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 3204,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967288,
                              "src": "5767:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 3212,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5767:69:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 3203,
                          "name": "_hashTypedDataV4",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6227,
                          "src": "5750:16:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32) view returns (bytes32)"
                          }
                        },
                        "id": 3213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5750:87:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3214,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3183,
                        "src": "5851:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 3215,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3185,
                        "src": "5866:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3216,
                        "name": "s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3187,
                        "src": "5881:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 3201,
                        "name": "ECDSA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5981,
                        "src": "5723:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ECDSA_$5981_$",
                          "typeString": "type(library ECDSA)"
                        }
                      },
                      "id": 3202,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5921,
                      "src": "5723:13:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                      }
                    },
                    "id": 3217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5723:169:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5706:186:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3220,
                          "name": "nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3179,
                          "src": "5910:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 3222,
                              "name": "signer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3200,
                              "src": "5929:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3221,
                            "name": "_useNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3758,
                            "src": "5919:9:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 3223,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5919:17:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5910:26:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230566f7465733a20696e76616c6964206e6f6e6365",
                        "id": 3225,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5938:27:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1a23b43d95073d55a7380117ca03cace60cd22fee15d5cb140d51e46236e6872",
                          "typeString": "literal_string \"ERC20Votes: invalid nonce\""
                        },
                        "value": "ERC20Votes: invalid nonce"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1a23b43d95073d55a7380117ca03cace60cd22fee15d5cb140d51e46236e6872",
                          "typeString": "literal_string \"ERC20Votes: invalid nonce\""
                        }
                      ],
                      "id": 3219,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5902:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5902:64:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3227,
                  "nodeType": "ExpressionStatement",
                  "src": "5902:64:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3229,
                        "name": "signer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3200,
                        "src": "5986:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3230,
                        "name": "delegatee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3177,
                        "src": "5994:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3228,
                      "name": "_delegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3371,
                      "src": "5976:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5976:28:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3232,
                  "nodeType": "ExpressionStatement",
                  "src": "5976:28:16"
                }
              ]
            },
            "documentation": {
              "id": 3175,
              "nodeType": "StructuredDocumentation",
              "src": "5366:66:16",
              "text": " @dev Delegates votes from signer to `delegatee`"
            },
            "functionSelector": "c3cda520",
            "id": 3234,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegateBySig",
            "nameLocation": "5446:13:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3189,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5610:8:16"
            },
            "parameters": {
              "id": 3188,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3177,
                  "mutability": "mutable",
                  "name": "delegatee",
                  "nameLocation": "5477:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5469:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3176,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5469:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3179,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nameLocation": "5504:5:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5496:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3178,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5496:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3181,
                  "mutability": "mutable",
                  "name": "expiry",
                  "nameLocation": "5527:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5519:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3180,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5519:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3183,
                  "mutability": "mutable",
                  "name": "v",
                  "nameLocation": "5549:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5543:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3182,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5543:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3185,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "5568:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5560:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3184,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5560:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3187,
                  "mutability": "mutable",
                  "name": "s",
                  "nameLocation": "5587:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5579:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3186,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5579:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5459:135:16"
            },
            "returnParameters": {
              "id": 3190,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5619:0:16"
            },
            "scope": 3565,
            "src": "5437:574:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3246,
              "nodeType": "Block",
              "src": "6175:41:16",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 3242,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6197:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": {
                            "id": 3241,
                            "name": "uint224",
                            "nodeType": "ElementaryTypeName",
                            "src": "6197:7:16",
                            "typeDescriptions": {}
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          }
                        ],
                        "id": 3240,
                        "name": "type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967269,
                        "src": "6192:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 3243,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6192:13:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_meta_type_t_uint224",
                        "typeString": "type(uint224)"
                      }
                    },
                    "id": 3244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "max",
                    "nodeType": "MemberAccess",
                    "src": "6192:17:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "functionReturnParameters": 3239,
                  "id": 3245,
                  "nodeType": "Return",
                  "src": "6185:24:16"
                }
              ]
            },
            "documentation": {
              "id": 3235,
              "nodeType": "StructuredDocumentation",
              "src": "6017:91:16",
              "text": " @dev Maximum token supply. Defaults to `type(uint224).max` (2^224^ - 1)."
            },
            "id": 3247,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_maxSupply",
            "nameLocation": "6122:10:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3236,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6132:2:16"
            },
            "returnParameters": {
              "id": 3239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3238,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3247,
                  "src": "6166:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint224",
                    "typeString": "uint224"
                  },
                  "typeName": {
                    "id": 3237,
                    "name": "uint224",
                    "nodeType": "ElementaryTypeName",
                    "src": "6166:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6165:9:16"
            },
            "scope": 3565,
            "src": "6113:103:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2623
            ],
            "body": {
              "id": 3278,
              "nodeType": "Block",
              "src": "6379:211:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3259,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3250,
                        "src": "6401:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3260,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3252,
                        "src": "6410:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 3256,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "6389:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Votes_$3565_$",
                          "typeString": "type(contract super ERC20Votes)"
                        }
                      },
                      "id": 3258,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2623,
                      "src": "6389:11:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 3261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6389:28:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3262,
                  "nodeType": "ExpressionStatement",
                  "src": "6389:28:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3268,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 3264,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2303,
                            "src": "6435:11:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 3265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6435:13:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 3266,
                            "name": "_maxSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "6452:10:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint224_$",
                              "typeString": "function () view returns (uint224)"
                            }
                          },
                          "id": 3267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6452:12:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "6435:29:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230566f7465733a20746f74616c20737570706c79207269736b73206f766572666c6f77696e6720766f746573",
                        "id": 3269,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6466:50:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_97859f657b3d95198b68f29ae96ee966779795bec3ef1e76700d2d39fefd7699",
                          "typeString": "literal_string \"ERC20Votes: total supply risks overflowing votes\""
                        },
                        "value": "ERC20Votes: total supply risks overflowing votes"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_97859f657b3d95198b68f29ae96ee966779795bec3ef1e76700d2d39fefd7699",
                          "typeString": "literal_string \"ERC20Votes: total supply risks overflowing votes\""
                        }
                      ],
                      "id": 3263,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6427:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3270,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6427:90:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3271,
                  "nodeType": "ExpressionStatement",
                  "src": "6427:90:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3273,
                        "name": "_totalSupplyCheckpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2964,
                        "src": "6545:23:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "id": 3274,
                        "name": "_add",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3550,
                        "src": "6570:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      {
                        "id": 3275,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3252,
                        "src": "6576:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3272,
                      "name": "_writeCheckpoint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3536,
                      "src": "6528:16:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,function (uint256,uint256) view returns (uint256),uint256) returns (uint256,uint256)"
                      }
                    },
                    "id": 3276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6528:55:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "id": 3277,
                  "nodeType": "ExpressionStatement",
                  "src": "6528:55:16"
                }
              ]
            },
            "documentation": {
              "id": 3248,
              "nodeType": "StructuredDocumentation",
              "src": "6222:78:16",
              "text": " @dev Snapshots the totalSupply after it has been increased."
            },
            "id": 3279,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "6314:5:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3254,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6370:8:16"
            },
            "parameters": {
              "id": 3253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3250,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "6328:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3279,
                  "src": "6320:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3249,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6320:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3252,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "6345:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3279,
                  "src": "6337:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6337:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6319:33:16"
            },
            "returnParameters": {
              "id": 3255,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6379:0:16"
            },
            "scope": 3565,
            "src": "6305:285:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2695
            ],
            "body": {
              "id": 3301,
              "nodeType": "Block",
              "src": "6753:116:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3291,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3282,
                        "src": "6775:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3292,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3284,
                        "src": "6784:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 3288,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "6763:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Votes_$3565_$",
                          "typeString": "type(contract super ERC20Votes)"
                        }
                      },
                      "id": 3290,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2695,
                      "src": "6763:11:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 3293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6763:28:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3294,
                  "nodeType": "ExpressionStatement",
                  "src": "6763:28:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3296,
                        "name": "_totalSupplyCheckpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2964,
                        "src": "6819:23:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "id": 3297,
                        "name": "_subtract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3564,
                        "src": "6844:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      {
                        "id": 3298,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3284,
                        "src": "6855:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3295,
                      "name": "_writeCheckpoint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3536,
                      "src": "6802:16:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,function (uint256,uint256) view returns (uint256),uint256) returns (uint256,uint256)"
                      }
                    },
                    "id": 3299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6802:60:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "id": 3300,
                  "nodeType": "ExpressionStatement",
                  "src": "6802:60:16"
                }
              ]
            },
            "documentation": {
              "id": 3280,
              "nodeType": "StructuredDocumentation",
              "src": "6596:78:16",
              "text": " @dev Snapshots the totalSupply after it has been decreased."
            },
            "id": 3302,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nameLocation": "6688:5:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3286,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6744:8:16"
            },
            "parameters": {
              "id": 3285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3282,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "6702:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3302,
                  "src": "6694:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3281,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6694:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3284,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "6719:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3302,
                  "src": "6711:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3283,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6711:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6693:33:16"
            },
            "returnParameters": {
              "id": 3287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6753:0:16"
            },
            "scope": 3565,
            "src": "6679:190:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2805
            ],
            "body": {
              "id": 3331,
              "nodeType": "Block",
              "src": "7129:127:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3316,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3305,
                        "src": "7165:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3317,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3307,
                        "src": "7171:2:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3318,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3309,
                        "src": "7175:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 3313,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "7139:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Votes_$3565_$",
                          "typeString": "type(contract super ERC20Votes)"
                        }
                      },
                      "id": 3315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_afterTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2805,
                      "src": "7139:25:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 3319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7139:43:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3320,
                  "nodeType": "ExpressionStatement",
                  "src": "7139:43:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3323,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3305,
                            "src": "7220:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3322,
                          "name": "delegates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3013,
                          "src": "7210:9:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                            "typeString": "function (address) view returns (address)"
                          }
                        },
                        "id": 3324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7210:15:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 3326,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3307,
                            "src": "7237:2:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3325,
                          "name": "delegates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3013,
                          "src": "7227:9:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                            "typeString": "function (address) view returns (address)"
                          }
                        },
                        "id": 3327,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7227:13:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3328,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3309,
                        "src": "7242:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3321,
                      "name": "_moveVotingPower",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3442,
                      "src": "7193:16:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 3329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7193:56:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3330,
                  "nodeType": "ExpressionStatement",
                  "src": "7193:56:16"
                }
              ]
            },
            "documentation": {
              "id": 3303,
              "nodeType": "StructuredDocumentation",
              "src": "6875:122:16",
              "text": " @dev Move voting power when tokens are transferred.\n Emits a {DelegateVotesChanged} event."
            },
            "id": 3332,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterTokenTransfer",
            "nameLocation": "7011:19:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3311,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7120:8:16"
            },
            "parameters": {
              "id": 3310,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3305,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "7048:4:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3332,
                  "src": "7040:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3304,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7040:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3307,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "7070:2:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3332,
                  "src": "7062:10:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3306,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7062:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3309,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "7090:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3332,
                  "src": "7082:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3308,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7082:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7030:72:16"
            },
            "returnParameters": {
              "id": 3312,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7129:0:16"
            },
            "scope": 3565,
            "src": "7002:254:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3370,
              "nodeType": "Block",
              "src": "7487:306:16",
              "statements": [
                {
                  "assignments": [
                    3341
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3341,
                      "mutability": "mutable",
                      "name": "currentDelegate",
                      "nameLocation": "7505:15:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3370,
                      "src": "7497:23:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3340,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7497:7:16",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3345,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 3343,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3335,
                        "src": "7533:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3342,
                      "name": "delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3013,
                      "src": "7523:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                        "typeString": "function (address) view returns (address)"
                      }
                    },
                    "id": 3344,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7523:20:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7497:46:16"
                },
                {
                  "assignments": [
                    3347
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3347,
                      "mutability": "mutable",
                      "name": "delegatorBalance",
                      "nameLocation": "7561:16:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3370,
                      "src": "7553:24:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3346,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7553:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3351,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 3349,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3335,
                        "src": "7590:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3348,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2317,
                      "src": "7580:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 3350,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7580:20:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7553:47:16"
                },
                {
                  "expression": {
                    "id": 3356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3352,
                        "name": "_delegates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2954,
                        "src": "7610:10:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 3354,
                      "indexExpression": {
                        "id": 3353,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3335,
                        "src": "7621:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7610:21:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3355,
                      "name": "delegatee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3337,
                      "src": "7634:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7610:33:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3357,
                  "nodeType": "ExpressionStatement",
                  "src": "7610:33:16"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3359,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3335,
                        "src": "7675:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3360,
                        "name": "currentDelegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3341,
                        "src": "7686:15:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3361,
                        "name": "delegatee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3337,
                        "src": "7703:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3358,
                      "name": "DelegateChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 544,
                      "src": "7659:15:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 3362,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7659:54:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3363,
                  "nodeType": "EmitStatement",
                  "src": "7654:59:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3365,
                        "name": "currentDelegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3341,
                        "src": "7741:15:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3366,
                        "name": "delegatee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3337,
                        "src": "7758:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3367,
                        "name": "delegatorBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3347,
                        "src": "7769:16:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3364,
                      "name": "_moveVotingPower",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3442,
                      "src": "7724:16:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 3368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7724:62:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3369,
                  "nodeType": "ExpressionStatement",
                  "src": "7724:62:16"
                }
              ]
            },
            "documentation": {
              "id": 3333,
              "nodeType": "StructuredDocumentation",
              "src": "7262:146:16",
              "text": " @dev Change delegation for `delegator` to `delegatee`.\n Emits events {DelegateChanged} and {DelegateVotesChanged}."
            },
            "id": 3371,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_delegate",
            "nameLocation": "7422:9:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3335,
                  "mutability": "mutable",
                  "name": "delegator",
                  "nameLocation": "7440:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3371,
                  "src": "7432:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3334,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7432:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3337,
                  "mutability": "mutable",
                  "name": "delegatee",
                  "nameLocation": "7459:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3371,
                  "src": "7451:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3336,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7451:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7431:38:16"
            },
            "returnParameters": {
              "id": 3339,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7487:0:16"
            },
            "scope": 3565,
            "src": "7413:380:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3441,
              "nodeType": "Block",
              "src": "7905:521:16",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 3382,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3380,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3373,
                        "src": "7919:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "id": 3381,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3375,
                        "src": "7926:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "7919:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3383,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3377,
                        "src": "7933:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 3384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7942:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "7933:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7919:24:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3440,
                  "nodeType": "IfStatement",
                  "src": "7915:505:16",
                  "trueBody": {
                    "id": 3439,
                    "nodeType": "Block",
                    "src": "7945:475:16",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3387,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3373,
                            "src": "7963:3:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3390,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7978:1:16",
                                "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": 3389,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7970:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3388,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "7970:7:16",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3391,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7970:10:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "7963:17:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3412,
                        "nodeType": "IfStatement",
                        "src": "7959:221:16",
                        "trueBody": {
                          "id": 3411,
                          "nodeType": "Block",
                          "src": "7982:198:16",
                          "statements": [
                            {
                              "assignments": [
                                3394,
                                3396
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3394,
                                  "mutability": "mutable",
                                  "name": "oldWeight",
                                  "nameLocation": "8009:9:16",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3411,
                                  "src": "8001:17:16",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3393,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8001:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 3396,
                                  "mutability": "mutable",
                                  "name": "newWeight",
                                  "nameLocation": "8028:9:16",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3411,
                                  "src": "8020:17:16",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3395,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8020:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3404,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 3398,
                                      "name": "_checkpoints",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2960,
                                      "src": "8058:12:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                                        "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                                      }
                                    },
                                    "id": 3400,
                                    "indexExpression": {
                                      "id": 3399,
                                      "name": "src",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3373,
                                      "src": "8071:3:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "8058:17:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                                      "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                                    }
                                  },
                                  {
                                    "id": 3401,
                                    "name": "_subtract",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3564,
                                    "src": "8077:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  {
                                    "id": 3402,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3377,
                                    "src": "8088:6:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                                      "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                                    },
                                    {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3397,
                                  "name": "_writeCheckpoint",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3536,
                                  "src": "8041:16:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,function (uint256,uint256) view returns (uint256),uint256) returns (uint256,uint256)"
                                  }
                                },
                                "id": 3403,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8041:54:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "8000:95:16"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 3406,
                                    "name": "src",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3373,
                                    "src": "8139:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3407,
                                    "name": "oldWeight",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3394,
                                    "src": "8144:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 3408,
                                    "name": "newWeight",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3396,
                                    "src": "8155:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3405,
                                  "name": "DelegateVotesChanged",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 553,
                                  "src": "8118:20:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256,uint256)"
                                  }
                                },
                                "id": 3409,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8118:47:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3410,
                              "nodeType": "EmitStatement",
                              "src": "8113:52:16"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3413,
                            "name": "dst",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3375,
                            "src": "8198:3:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3416,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8213:1:16",
                                "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": 3415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8205:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3414,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8205:7:16",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3417,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8205:10:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "8198:17:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3438,
                        "nodeType": "IfStatement",
                        "src": "8194:216:16",
                        "trueBody": {
                          "id": 3437,
                          "nodeType": "Block",
                          "src": "8217:193:16",
                          "statements": [
                            {
                              "assignments": [
                                3420,
                                3422
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3420,
                                  "mutability": "mutable",
                                  "name": "oldWeight",
                                  "nameLocation": "8244:9:16",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3437,
                                  "src": "8236:17:16",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3419,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8236:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 3422,
                                  "mutability": "mutable",
                                  "name": "newWeight",
                                  "nameLocation": "8263:9:16",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3437,
                                  "src": "8255:17:16",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3421,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8255:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3430,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 3424,
                                      "name": "_checkpoints",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2960,
                                      "src": "8293:12:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                                        "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                                      }
                                    },
                                    "id": 3426,
                                    "indexExpression": {
                                      "id": 3425,
                                      "name": "dst",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3375,
                                      "src": "8306:3:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "8293:17:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                                      "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                                    }
                                  },
                                  {
                                    "id": 3427,
                                    "name": "_add",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3550,
                                    "src": "8312:4:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  {
                                    "id": 3428,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3377,
                                    "src": "8318:6:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                                      "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                                    },
                                    {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3423,
                                  "name": "_writeCheckpoint",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3536,
                                  "src": "8276:16:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,function (uint256,uint256) view returns (uint256),uint256) returns (uint256,uint256)"
                                  }
                                },
                                "id": 3429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8276:49:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "8235:90:16"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 3432,
                                    "name": "dst",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3375,
                                    "src": "8369:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3433,
                                    "name": "oldWeight",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3420,
                                    "src": "8374:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 3434,
                                    "name": "newWeight",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3422,
                                    "src": "8385:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3431,
                                  "name": "DelegateVotesChanged",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 553,
                                  "src": "8348:20:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256,uint256)"
                                  }
                                },
                                "id": 3435,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8348:47:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3436,
                              "nodeType": "EmitStatement",
                              "src": "8343:52:16"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "id": 3442,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_moveVotingPower",
            "nameLocation": "7808:16:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3378,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3373,
                  "mutability": "mutable",
                  "name": "src",
                  "nameLocation": "7842:3:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3442,
                  "src": "7834:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3372,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7834:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3375,
                  "mutability": "mutable",
                  "name": "dst",
                  "nameLocation": "7863:3:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3442,
                  "src": "7855:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3374,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7855:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3377,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "7884:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3442,
                  "src": "7876:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3376,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7876:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7824:72:16"
            },
            "returnParameters": {
              "id": 3379,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7905:0:16"
            },
            "scope": 3565,
            "src": "7799:627:16",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 3535,
              "nodeType": "Block",
              "src": "8640:423:16",
              "statements": [
                {
                  "assignments": [
                    3466
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3466,
                      "mutability": "mutable",
                      "name": "pos",
                      "nameLocation": "8658:3:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3535,
                      "src": "8650:11:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3465,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8650:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3469,
                  "initialValue": {
                    "expression": {
                      "id": 3467,
                      "name": "ckpts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3446,
                      "src": "8664:5:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                        "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                      }
                    },
                    "id": 3468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "8664:12:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8650:26:16"
                },
                {
                  "expression": {
                    "id": 3482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3470,
                      "name": "oldWeight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3461,
                      "src": "8686:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3471,
                          "name": "pos",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3466,
                          "src": "8698:3:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 3472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8705:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "8698:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 3475,
                            "name": "ckpts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3446,
                            "src": "8713:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                              "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                            }
                          },
                          "id": 3479,
                          "indexExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3478,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3476,
                              "name": "pos",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3466,
                              "src": "8719:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 3477,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8725:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "8719:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8713:14:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                            "typeString": "struct ERC20Votes.Checkpoint storage ref"
                          }
                        },
                        "id": 3480,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "votes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2944,
                        "src": "8713:20:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "id": 3481,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "8698:35:16",
                      "trueExpression": {
                        "hexValue": "30",
                        "id": 3474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8709:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "src": "8686:47:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3483,
                  "nodeType": "ExpressionStatement",
                  "src": "8686:47:16"
                },
                {
                  "expression": {
                    "id": 3489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3484,
                      "name": "newWeight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3463,
                      "src": "8743:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 3486,
                          "name": "oldWeight",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3461,
                          "src": "8758:9:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 3487,
                          "name": "delta",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3458,
                          "src": "8769:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3485,
                        "name": "op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3456,
                        "src": "8755:2:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) view returns (uint256)"
                        }
                      },
                      "id": 3488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8755:20:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8743:32:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3490,
                  "nodeType": "ExpressionStatement",
                  "src": "8743:32:16"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3493,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3491,
                        "name": "pos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3466,
                        "src": "8790:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 3492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8796:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "8790:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 3494,
                            "name": "ckpts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3446,
                            "src": "8801:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                              "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                            }
                          },
                          "id": 3498,
                          "indexExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3497,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3495,
                              "name": "pos",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3466,
                              "src": "8807:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 3496,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8813:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "8807:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8801:14:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                            "typeString": "struct ERC20Votes.Checkpoint storage ref"
                          }
                        },
                        "id": 3499,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "fromBlock",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2942,
                        "src": "8801:24:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "id": 3500,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967292,
                          "src": "8829:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 3501,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "src": "8829:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "8801:40:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8790:51:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 3533,
                    "nodeType": "Block",
                    "src": "8926:131:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 3523,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967292,
                                        "src": "8992:5:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 3524,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "number",
                                      "nodeType": "MemberAccess",
                                      "src": "8992:12:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 3521,
                                      "name": "SafeCast",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6745,
                                      "src": "8974:8:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SafeCast_$6745_$",
                                        "typeString": "type(library SafeCast)"
                                      }
                                    },
                                    "id": 3522,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "toUint32",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6480,
                                    "src": "8974:17:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$",
                                      "typeString": "function (uint256) pure returns (uint32)"
                                    }
                                  },
                                  "id": 3525,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8974:31:16",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 3528,
                                      "name": "newWeight",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3463,
                                      "src": "9033:9:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 3526,
                                      "name": "SafeCast",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6745,
                                      "src": "9014:8:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SafeCast_$6745_$",
                                        "typeString": "type(library SafeCast)"
                                      }
                                    },
                                    "id": 3527,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "toUint224",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6380,
                                    "src": "9014:18:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint224_$",
                                      "typeString": "function (uint256) pure returns (uint224)"
                                    }
                                  },
                                  "id": 3529,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9014:29:16",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint224",
                                    "typeString": "uint224"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  },
                                  {
                                    "typeIdentifier": "t_uint224",
                                    "typeString": "uint224"
                                  }
                                ],
                                "id": 3520,
                                "name": "Checkpoint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2945,
                                "src": "8951:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Checkpoint_$2945_storage_ptr_$",
                                  "typeString": "type(struct ERC20Votes.Checkpoint storage pointer)"
                                }
                              },
                              "id": 3530,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "fromBlock",
                                "votes"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "8951:94:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$2945_memory_ptr",
                                "typeString": "struct ERC20Votes.Checkpoint memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Checkpoint_$2945_memory_ptr",
                                "typeString": "struct ERC20Votes.Checkpoint memory"
                              }
                            ],
                            "expression": {
                              "id": 3517,
                              "name": "ckpts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3446,
                              "src": "8940:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                                "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 3519,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "8940:10:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_struct$_Checkpoint_$2945_storage_$returns$__$bound_to$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$",
                              "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,struct ERC20Votes.Checkpoint storage ref)"
                            }
                          },
                          "id": 3531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8940:106:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3532,
                        "nodeType": "ExpressionStatement",
                        "src": "8940:106:16"
                      }
                    ]
                  },
                  "id": 3534,
                  "nodeType": "IfStatement",
                  "src": "8786:271:16",
                  "trueBody": {
                    "id": 3516,
                    "nodeType": "Block",
                    "src": "8843:77:16",
                    "statements": [
                      {
                        "expression": {
                          "id": 3514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3504,
                                "name": "ckpts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3446,
                                "src": "8857:5:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                                  "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 3508,
                              "indexExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3505,
                                  "name": "pos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3466,
                                  "src": "8863:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 3506,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8869:1:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "8863:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8857:14:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                                "typeString": "struct ERC20Votes.Checkpoint storage ref"
                              }
                            },
                            "id": 3509,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "votes",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2944,
                            "src": "8857:20:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3512,
                                "name": "newWeight",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3463,
                                "src": "8899:9:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 3510,
                                "name": "SafeCast",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6745,
                                "src": "8880:8:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_SafeCast_$6745_$",
                                  "typeString": "type(library SafeCast)"
                                }
                              },
                              "id": 3511,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint224",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6380,
                              "src": "8880:18:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint224_$",
                                "typeString": "function (uint256) pure returns (uint224)"
                              }
                            },
                            "id": 3513,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8880:29:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "8857:52:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "id": 3515,
                        "nodeType": "ExpressionStatement",
                        "src": "8857:52:16"
                      }
                    ]
                  }
                }
              ]
            },
            "id": 3536,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_writeCheckpoint",
            "nameLocation": "8441:16:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3459,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3446,
                  "mutability": "mutable",
                  "name": "ckpts",
                  "nameLocation": "8488:5:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3536,
                  "src": "8467:26:16",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                    "typeString": "struct ERC20Votes.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3444,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 3443,
                        "name": "Checkpoint",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2945,
                        "src": "8467:10:16"
                      },
                      "referencedDeclaration": 2945,
                      "src": "8467:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$2945_storage_ptr",
                        "typeString": "struct ERC20Votes.Checkpoint"
                      }
                    },
                    "id": 3445,
                    "nodeType": "ArrayTypeName",
                    "src": "8467:12:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                      "typeString": "struct ERC20Votes.Checkpoint[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3456,
                  "mutability": "mutable",
                  "name": "op",
                  "nameLocation": "8553:2:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3536,
                  "src": "8503:52:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                    "typeString": "function (uint256,uint256) view returns (uint256)"
                  },
                  "typeName": {
                    "id": 3455,
                    "nodeType": "FunctionTypeName",
                    "parameterTypes": {
                      "id": 3451,
                      "nodeType": "ParameterList",
                      "parameters": [
                        {
                          "constant": false,
                          "id": 3448,
                          "mutability": "mutable",
                          "name": "",
                          "nameLocation": "-1:-1:-1",
                          "nodeType": "VariableDeclaration",
                          "scope": 3455,
                          "src": "8512:7:16",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3447,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "8512:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 3450,
                          "mutability": "mutable",
                          "name": "",
                          "nameLocation": "-1:-1:-1",
                          "nodeType": "VariableDeclaration",
                          "scope": 3455,
                          "src": "8521:7:16",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3449,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "8521:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "src": "8511:18:16"
                    },
                    "returnParameterTypes": {
                      "id": 3454,
                      "nodeType": "ParameterList",
                      "parameters": [
                        {
                          "constant": false,
                          "id": 3453,
                          "mutability": "mutable",
                          "name": "",
                          "nameLocation": "-1:-1:-1",
                          "nodeType": "VariableDeclaration",
                          "scope": 3455,
                          "src": "8544:7:16",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3452,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "8544:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "src": "8543:9:16"
                    },
                    "src": "8503:52:16",
                    "stateMutability": "view",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                      "typeString": "function (uint256,uint256) view returns (uint256)"
                    },
                    "visibility": "internal"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3458,
                  "mutability": "mutable",
                  "name": "delta",
                  "nameLocation": "8573:5:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3536,
                  "src": "8565:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3457,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8565:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8457:127:16"
            },
            "returnParameters": {
              "id": 3464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3461,
                  "mutability": "mutable",
                  "name": "oldWeight",
                  "nameLocation": "8610:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3536,
                  "src": "8602:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3460,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8602:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3463,
                  "mutability": "mutable",
                  "name": "newWeight",
                  "nameLocation": "8629:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3536,
                  "src": "8621:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3462,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8621:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8601:38:16"
            },
            "scope": 3565,
            "src": "8432:631:16",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 3549,
              "nodeType": "Block",
              "src": "9136:29:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3545,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3538,
                      "src": "9153:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 3546,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3540,
                      "src": "9157:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9153:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3544,
                  "id": 3548,
                  "nodeType": "Return",
                  "src": "9146:12:16"
                }
              ]
            },
            "id": 3550,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_add",
            "nameLocation": "9078:4:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3541,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3538,
                  "mutability": "mutable",
                  "name": "a",
                  "nameLocation": "9091:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3550,
                  "src": "9083:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3537,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9083:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3540,
                  "mutability": "mutable",
                  "name": "b",
                  "nameLocation": "9102:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3550,
                  "src": "9094:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3539,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9094:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9082:22:16"
            },
            "returnParameters": {
              "id": 3544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3543,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3550,
                  "src": "9127:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3542,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9127:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9126:9:16"
            },
            "scope": 3565,
            "src": "9069:96:16",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 3563,
              "nodeType": "Block",
              "src": "9243:29:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3559,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3552,
                      "src": "9260:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 3560,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3554,
                      "src": "9264:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9260:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3558,
                  "id": 3562,
                  "nodeType": "Return",
                  "src": "9253:12:16"
                }
              ]
            },
            "id": 3564,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_subtract",
            "nameLocation": "9180:9:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3552,
                  "mutability": "mutable",
                  "name": "a",
                  "nameLocation": "9198:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3564,
                  "src": "9190:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3551,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9190:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3554,
                  "mutability": "mutable",
                  "name": "b",
                  "nameLocation": "9209:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3564,
                  "src": "9201:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3553,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9201:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9189:22:16"
            },
            "returnParameters": {
              "id": 3558,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3557,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3564,
                  "src": "9234:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3556,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9234:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9233:9:16"
            },
            "scope": 3565,
            "src": "9171:101:16",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "scope": 3566,
        "src": "1253:8021:16",
        "usedErrors": []
      }
    ],
    "src": "121:9154:16"
  },
  "legacyAST": {
    "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol",
    "exportedSymbols": {
      "Context": [
        5297
      ],
      "Counters": [
        5371
      ],
      "ECDSA": [
        5981
      ],
      "EIP712": [
        6228
      ],
      "ERC20": [
        2806
      ],
      "ERC20Permit": [
        3759
      ],
      "ERC20Votes": [
        3565
      ],
      "IERC20": [
        2884
      ],
      "IERC20Metadata": [
        3590
      ],
      "IERC20Permit": [
        3795
      ],
      "IVotes": [
        610
      ],
      "Math": [
        6352
      ],
      "SafeCast": [
        6745
      ],
      "Strings": [
        5574
      ]
    },
    "id": 3566,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2930,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "121:23:16"
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol",
        "file": "./draft-ERC20Permit.sol",
        "id": 2931,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3566,
        "sourceUnit": 3760,
        "src": "146:33:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
        "file": "../../../utils/math/Math.sol",
        "id": 2932,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3566,
        "sourceUnit": 6353,
        "src": "180:38:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/governance/utils/IVotes.sol",
        "file": "../../../governance/utils/IVotes.sol",
        "id": 2933,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3566,
        "sourceUnit": 611,
        "src": "219:46:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
        "file": "../../../utils/math/SafeCast.sol",
        "id": 2934,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3566,
        "sourceUnit": 6746,
        "src": "266:42:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
        "file": "../../../utils/cryptography/ECDSA.sol",
        "id": 2935,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 3566,
        "sourceUnit": 5982,
        "src": "309:47:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 2937,
              "name": "IVotes",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 610,
              "src": "1285:6:16"
            },
            "id": 2938,
            "nodeType": "InheritanceSpecifier",
            "src": "1285:6:16"
          },
          {
            "baseName": {
              "id": 2939,
              "name": "ERC20Permit",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3759,
              "src": "1293:11:16"
            },
            "id": 2940,
            "nodeType": "InheritanceSpecifier",
            "src": "1293:11:16"
          }
        ],
        "canonicalName": "ERC20Votes",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 2936,
          "nodeType": "StructuredDocumentation",
          "src": "358:894:16",
          "text": " @dev Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's,\n and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1.\n NOTE: If exact COMP compatibility is required, use the {ERC20VotesComp} variant of this module.\n This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either\n by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting\n power can be queried through the public accessors {getVotes} and {getPastVotes}.\n By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it\n requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.\n _Available since v4.2._"
        },
        "fullyImplemented": false,
        "id": 3565,
        "linearizedBaseContracts": [
          3565,
          3759,
          6228,
          3795,
          2806,
          3590,
          2884,
          5297,
          610
        ],
        "name": "ERC20Votes",
        "nameLocation": "1271:10:16",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "ERC20Votes.Checkpoint",
            "id": 2945,
            "members": [
              {
                "constant": false,
                "id": 2942,
                "mutability": "mutable",
                "name": "fromBlock",
                "nameLocation": "1346:9:16",
                "nodeType": "VariableDeclaration",
                "scope": 2945,
                "src": "1339:16:16",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 2941,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1339:6:16",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2944,
                "mutability": "mutable",
                "name": "votes",
                "nameLocation": "1373:5:16",
                "nodeType": "VariableDeclaration",
                "scope": 2945,
                "src": "1365:13:16",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint224",
                  "typeString": "uint224"
                },
                "typeName": {
                  "id": 2943,
                  "name": "uint224",
                  "nodeType": "ElementaryTypeName",
                  "src": "1365:7:16",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint224",
                    "typeString": "uint224"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Checkpoint",
            "nameLocation": "1318:10:16",
            "nodeType": "StructDefinition",
            "scope": 3565,
            "src": "1311:74:16",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 2950,
            "mutability": "constant",
            "name": "_DELEGATION_TYPEHASH",
            "nameLocation": "1416:20:16",
            "nodeType": "VariableDeclaration",
            "scope": 3565,
            "src": "1391:127:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 2946,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1391:7:16",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "44656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e743235362065787069727929",
                  "id": 2948,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1457:60:16",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_e48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf",
                    "typeString": "literal_string \"Delegation(address delegatee,uint256 nonce,uint256 expiry)\""
                  },
                  "value": "Delegation(address delegatee,uint256 nonce,uint256 expiry)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_e48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf",
                    "typeString": "literal_string \"Delegation(address delegatee,uint256 nonce,uint256 expiry)\""
                  }
                ],
                "id": 2947,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "1447:9:16",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 2949,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1447:71:16",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 2954,
            "mutability": "mutable",
            "name": "_delegates",
            "nameLocation": "1561:10:16",
            "nodeType": "VariableDeclaration",
            "scope": 3565,
            "src": "1525:46:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
              "typeString": "mapping(address => address)"
            },
            "typeName": {
              "id": 2953,
              "keyType": {
                "id": 2951,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1533:7:16",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1525:27:16",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                "typeString": "mapping(address => address)"
              },
              "valueType": {
                "id": 2952,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1544:7:16",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 2960,
            "mutability": "mutable",
            "name": "_checkpoints",
            "nameLocation": "1618:12:16",
            "nodeType": "VariableDeclaration",
            "scope": 3565,
            "src": "1577:53:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
              "typeString": "mapping(address => struct ERC20Votes.Checkpoint[])"
            },
            "typeName": {
              "id": 2959,
              "keyType": {
                "id": 2955,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1585:7:16",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1577:32:16",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                "typeString": "mapping(address => struct ERC20Votes.Checkpoint[])"
              },
              "valueType": {
                "baseType": {
                  "id": 2957,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 2956,
                    "name": "Checkpoint",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2945,
                    "src": "1596:10:16"
                  },
                  "referencedDeclaration": 2945,
                  "src": "1596:10:16",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Checkpoint_$2945_storage_ptr",
                    "typeString": "struct ERC20Votes.Checkpoint"
                  }
                },
                "id": 2958,
                "nodeType": "ArrayTypeName",
                "src": "1596:12:16",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                  "typeString": "struct ERC20Votes.Checkpoint[]"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 2964,
            "mutability": "mutable",
            "name": "_totalSupplyCheckpoints",
            "nameLocation": "1657:23:16",
            "nodeType": "VariableDeclaration",
            "scope": 3565,
            "src": "1636:44:16",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
              "typeString": "struct ERC20Votes.Checkpoint[]"
            },
            "typeName": {
              "baseType": {
                "id": 2962,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 2961,
                  "name": "Checkpoint",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2945,
                  "src": "1636:10:16"
                },
                "referencedDeclaration": 2945,
                "src": "1636:10:16",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Checkpoint_$2945_storage_ptr",
                  "typeString": "struct ERC20Votes.Checkpoint"
                }
              },
              "id": 2963,
              "nodeType": "ArrayTypeName",
              "src": "1636:12:16",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                "typeString": "struct ERC20Votes.Checkpoint[]"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 2981,
              "nodeType": "Block",
              "src": "1856:50:16",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 2975,
                        "name": "_checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2960,
                        "src": "1873:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                          "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                        }
                      },
                      "id": 2977,
                      "indexExpression": {
                        "id": 2976,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2967,
                        "src": "1886:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1873:21:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                        "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                      }
                    },
                    "id": 2979,
                    "indexExpression": {
                      "id": 2978,
                      "name": "pos",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2969,
                      "src": "1895:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1873:26:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                      "typeString": "struct ERC20Votes.Checkpoint storage ref"
                    }
                  },
                  "functionReturnParameters": 2974,
                  "id": 2980,
                  "nodeType": "Return",
                  "src": "1866:33:16"
                }
              ]
            },
            "documentation": {
              "id": 2965,
              "nodeType": "StructuredDocumentation",
              "src": "1687:66:16",
              "text": " @dev Get the `pos`-th checkpoint for `account`."
            },
            "functionSelector": "f1127ed8",
            "id": 2982,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkpoints",
            "nameLocation": "1767:11:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2970,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2967,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "1787:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 2982,
                  "src": "1779:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1779:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2969,
                  "mutability": "mutable",
                  "name": "pos",
                  "nameLocation": "1803:3:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 2982,
                  "src": "1796:10:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 2968,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1796:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1778:29:16"
            },
            "returnParameters": {
              "id": 2974,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2973,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 2982,
                  "src": "1837:17:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Checkpoint_$2945_memory_ptr",
                    "typeString": "struct ERC20Votes.Checkpoint"
                  },
                  "typeName": {
                    "id": 2972,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2971,
                      "name": "Checkpoint",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2945,
                      "src": "1837:10:16"
                    },
                    "referencedDeclaration": 2945,
                    "src": "1837:10:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Checkpoint_$2945_storage_ptr",
                      "typeString": "struct ERC20Votes.Checkpoint"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1836:19:16"
            },
            "scope": 3565,
            "src": "1758:148:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2998,
              "nodeType": "Block",
              "src": "2059:71:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 2992,
                            "name": "_checkpoints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2960,
                            "src": "2094:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                              "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                            }
                          },
                          "id": 2994,
                          "indexExpression": {
                            "id": 2993,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2985,
                            "src": "2107:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2094:21:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                            "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                          }
                        },
                        "id": 2995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "2094:28:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 2990,
                        "name": "SafeCast",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6745,
                        "src": "2076:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SafeCast_$6745_$",
                          "typeString": "type(library SafeCast)"
                        }
                      },
                      "id": 2991,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "toUint32",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6480,
                      "src": "2076:17:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$",
                        "typeString": "function (uint256) pure returns (uint32)"
                      }
                    },
                    "id": 2996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2076:47:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 2989,
                  "id": 2997,
                  "nodeType": "Return",
                  "src": "2069:54:16"
                }
              ]
            },
            "documentation": {
              "id": 2983,
              "nodeType": "StructuredDocumentation",
              "src": "1912:64:16",
              "text": " @dev Get number of checkpoints for `account`."
            },
            "functionSelector": "6fcfff45",
            "id": 2999,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "numCheckpoints",
            "nameLocation": "1990:14:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2985,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "2013:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 2999,
                  "src": "2005:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2984,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2005:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2004:17:16"
            },
            "returnParameters": {
              "id": 2989,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2988,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 2999,
                  "src": "2051:6:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 2987,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2051:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2050:8:16"
            },
            "scope": 3565,
            "src": "1981:149:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              587
            ],
            "body": {
              "id": 3012,
              "nodeType": "Block",
              "src": "2301:43:16",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 3008,
                      "name": "_delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2954,
                      "src": "2318:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 3010,
                    "indexExpression": {
                      "id": 3009,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3002,
                      "src": "2329:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2318:19:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3007,
                  "id": 3011,
                  "nodeType": "Return",
                  "src": "2311:26:16"
                }
              ]
            },
            "documentation": {
              "id": 3000,
              "nodeType": "StructuredDocumentation",
              "src": "2136:77:16",
              "text": " @dev Get the address `account` is currently delegating to."
            },
            "functionSelector": "587cde1e",
            "id": 3013,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegates",
            "nameLocation": "2227:9:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3004,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2274:8:16"
            },
            "parameters": {
              "id": 3003,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3002,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "2245:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3013,
                  "src": "2237:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3001,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2237:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2236:17:16"
            },
            "returnParameters": {
              "id": 3007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3006,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3013,
                  "src": "2292:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3005,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2292:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2291:9:16"
            },
            "scope": 3565,
            "src": "2218:126:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              561
            ],
            "body": {
              "id": 3043,
              "nodeType": "Block",
              "src": "2505:127:16",
              "statements": [
                {
                  "assignments": [
                    3023
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3023,
                      "mutability": "mutable",
                      "name": "pos",
                      "nameLocation": "2523:3:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3043,
                      "src": "2515:11:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3022,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2515:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3028,
                  "initialValue": {
                    "expression": {
                      "baseExpression": {
                        "id": 3024,
                        "name": "_checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2960,
                        "src": "2529:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                          "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                        }
                      },
                      "id": 3026,
                      "indexExpression": {
                        "id": 3025,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3016,
                        "src": "2542:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2529:21:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                        "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                      }
                    },
                    "id": 3027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "2529:28:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2515:42:16"
                },
                {
                  "expression": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3031,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3029,
                        "name": "pos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3023,
                        "src": "2574:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 3030,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2581:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2574:8:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "expression": {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 3033,
                            "name": "_checkpoints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2960,
                            "src": "2589:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                              "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                            }
                          },
                          "id": 3035,
                          "indexExpression": {
                            "id": 3034,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3016,
                            "src": "2602:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2589:21:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                            "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                          }
                        },
                        "id": 3039,
                        "indexExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3038,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3036,
                            "name": "pos",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3023,
                            "src": "2611:3:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 3037,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2617:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "2611:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2589:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref"
                        }
                      },
                      "id": 3040,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "votes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2944,
                      "src": "2589:36:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "id": 3041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "2574:51:16",
                    "trueExpression": {
                      "hexValue": "30",
                      "id": 3032,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2585:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "functionReturnParameters": 3021,
                  "id": 3042,
                  "nodeType": "Return",
                  "src": "2567:58:16"
                }
              ]
            },
            "documentation": {
              "id": 3014,
              "nodeType": "StructuredDocumentation",
              "src": "2350:68:16",
              "text": " @dev Gets the current votes balance for `account`"
            },
            "functionSelector": "9ab24eb0",
            "id": 3044,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVotes",
            "nameLocation": "2432:8:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3018,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2478:8:16"
            },
            "parameters": {
              "id": 3017,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3016,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "2449:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3044,
                  "src": "2441:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3015,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2441:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2440:17:16"
            },
            "returnParameters": {
              "id": 3021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3020,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3044,
                  "src": "2496:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2496:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2495:9:16"
            },
            "scope": 3565,
            "src": "2423:209:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              571
            ],
            "body": {
              "id": 3070,
              "nodeType": "Block",
              "src": "2932:158:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3059,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3056,
                          "name": "blockNumber",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3049,
                          "src": "2950:11:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "expression": {
                            "id": 3057,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967292,
                            "src": "2964:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 3058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "src": "2964:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2950:26:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564",
                        "id": 3060,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2978:33:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_06e5bbaaa109e1d058e1026fbdce9ec5e51f304d46ad524d922a17511e41fd0d",
                          "typeString": "literal_string \"ERC20Votes: block not yet mined\""
                        },
                        "value": "ERC20Votes: block not yet mined"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_06e5bbaaa109e1d058e1026fbdce9ec5e51f304d46ad524d922a17511e41fd0d",
                          "typeString": "literal_string \"ERC20Votes: block not yet mined\""
                        }
                      ],
                      "id": 3055,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2942:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2942:70:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3062,
                  "nodeType": "ExpressionStatement",
                  "src": "2942:70:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 3064,
                          "name": "_checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2960,
                          "src": "3048:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 3066,
                        "indexExpression": {
                          "id": 3065,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3047,
                          "src": "3061:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3048:21:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "id": 3067,
                        "name": "blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3049,
                        "src": "3071:11:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3063,
                      "name": "_checkpointsLookup",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3160,
                      "src": "3029:18:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 3068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3029:54:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3054,
                  "id": 3069,
                  "nodeType": "Return",
                  "src": "3022:61:16"
                }
              ]
            },
            "documentation": {
              "id": 3045,
              "nodeType": "StructuredDocumentation",
              "src": "2638:182:16",
              "text": " @dev Retrieve the number of votes for `account` at the end of `blockNumber`.\n Requirements:\n - `blockNumber` must have been already mined"
            },
            "functionSelector": "3a46b1a8",
            "id": 3071,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPastVotes",
            "nameLocation": "2834:12:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3051,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2905:8:16"
            },
            "parameters": {
              "id": 3050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3047,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "2855:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3071,
                  "src": "2847:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3046,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2847:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3049,
                  "mutability": "mutable",
                  "name": "blockNumber",
                  "nameLocation": "2872:11:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3071,
                  "src": "2864:19:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3048,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2864:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2846:38:16"
            },
            "returnParameters": {
              "id": 3054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3053,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3071,
                  "src": "2923:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3052,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2923:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2922:9:16"
            },
            "scope": 3565,
            "src": "2825:265:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              579
            ],
            "body": {
              "id": 3093,
              "nodeType": "Block",
              "src": "3465:160:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3084,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3081,
                          "name": "blockNumber",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3074,
                          "src": "3483:11:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "expression": {
                            "id": 3082,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967292,
                            "src": "3497:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 3083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "src": "3497:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3483:26:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564",
                        "id": 3085,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3511:33:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_06e5bbaaa109e1d058e1026fbdce9ec5e51f304d46ad524d922a17511e41fd0d",
                          "typeString": "literal_string \"ERC20Votes: block not yet mined\""
                        },
                        "value": "ERC20Votes: block not yet mined"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_06e5bbaaa109e1d058e1026fbdce9ec5e51f304d46ad524d922a17511e41fd0d",
                          "typeString": "literal_string \"ERC20Votes: block not yet mined\""
                        }
                      ],
                      "id": 3080,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3475:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3475:70:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3087,
                  "nodeType": "ExpressionStatement",
                  "src": "3475:70:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3089,
                        "name": "_totalSupplyCheckpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2964,
                        "src": "3581:23:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "id": 3090,
                        "name": "blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3074,
                        "src": "3606:11:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3088,
                      "name": "_checkpointsLookup",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3160,
                      "src": "3562:18:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 3091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3562:56:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3079,
                  "id": 3092,
                  "nodeType": "Return",
                  "src": "3555:63:16"
                }
              ]
            },
            "documentation": {
              "id": 3072,
              "nodeType": "StructuredDocumentation",
              "src": "3096:268:16",
              "text": " @dev Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances.\n It is but NOT the sum of all the delegated votes!\n Requirements:\n - `blockNumber` must have been already mined"
            },
            "functionSelector": "8e539e8c",
            "id": 3094,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPastTotalSupply",
            "nameLocation": "3378:18:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3076,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3438:8:16"
            },
            "parameters": {
              "id": 3075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3074,
                  "mutability": "mutable",
                  "name": "blockNumber",
                  "nameLocation": "3405:11:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3094,
                  "src": "3397:19:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3073,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3397:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3396:21:16"
            },
            "returnParameters": {
              "id": 3079,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3078,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3094,
                  "src": "3456:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3077,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3456:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3455:9:16"
            },
            "scope": 3565,
            "src": "3369:256:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3159,
              "nodeType": "Block",
              "src": "3817:1350:16",
              "statements": [
                {
                  "assignments": [
                    3107
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3107,
                      "mutability": "mutable",
                      "name": "high",
                      "nameLocation": "4823:4:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3159,
                      "src": "4815:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3106,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4815:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3110,
                  "initialValue": {
                    "expression": {
                      "id": 3108,
                      "name": "ckpts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3099,
                      "src": "4830:5:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                        "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                      }
                    },
                    "id": 3109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "4830:12:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4815:27:16"
                },
                {
                  "assignments": [
                    3112
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3112,
                      "mutability": "mutable",
                      "name": "low",
                      "nameLocation": "4860:3:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3159,
                      "src": "4852:11:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3111,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4852:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3114,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 3113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4866:1:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4852:15:16"
                },
                {
                  "body": {
                    "id": 3145,
                    "nodeType": "Block",
                    "src": "4896:210:16",
                    "statements": [
                      {
                        "assignments": [
                          3119
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3119,
                            "mutability": "mutable",
                            "name": "mid",
                            "nameLocation": "4918:3:16",
                            "nodeType": "VariableDeclaration",
                            "scope": 3145,
                            "src": "4910:11:16",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3118,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4910:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3125,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3122,
                              "name": "low",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3112,
                              "src": "4937:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3123,
                              "name": "high",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3107,
                              "src": "4942:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 3120,
                              "name": "Math",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6352,
                              "src": "4924:4:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Math_$6352_$",
                                "typeString": "type(library Math)"
                              }
                            },
                            "id": 3121,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "average",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6326,
                            "src": "4924:12:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 3124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4924:23:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4910:37:16"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3131,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 3126,
                                "name": "ckpts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3099,
                                "src": "4965:5:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                                  "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 3128,
                              "indexExpression": {
                                "id": 3127,
                                "name": "mid",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3119,
                                "src": "4971:3:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4965:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                                "typeString": "struct ERC20Votes.Checkpoint storage ref"
                              }
                            },
                            "id": 3129,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fromBlock",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2942,
                            "src": "4965:20:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 3130,
                            "name": "blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3101,
                            "src": "4988:11:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4965:34:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 3143,
                          "nodeType": "Block",
                          "src": "5050:46:16",
                          "statements": [
                            {
                              "expression": {
                                "id": 3141,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3137,
                                  "name": "low",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3112,
                                  "src": "5068:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3140,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3138,
                                    "name": "mid",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3119,
                                    "src": "5074:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 3139,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5080:1:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "5074:7:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5068:13:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3142,
                              "nodeType": "ExpressionStatement",
                              "src": "5068:13:16"
                            }
                          ]
                        },
                        "id": 3144,
                        "nodeType": "IfStatement",
                        "src": "4961:135:16",
                        "trueBody": {
                          "id": 3136,
                          "nodeType": "Block",
                          "src": "5001:43:16",
                          "statements": [
                            {
                              "expression": {
                                "id": 3134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3132,
                                  "name": "high",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3107,
                                  "src": "5019:4:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 3133,
                                  "name": "mid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3119,
                                  "src": "5026:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5019:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3135,
                              "nodeType": "ExpressionStatement",
                              "src": "5019:10:16"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3115,
                      "name": "low",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3112,
                      "src": "4884:3:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 3116,
                      "name": "high",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3107,
                      "src": "4890:4:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4884:10:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3146,
                  "nodeType": "WhileStatement",
                  "src": "4877:229:16"
                },
                {
                  "expression": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3149,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3147,
                        "name": "high",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3107,
                        "src": "5123:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 3148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5131:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5123:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 3151,
                          "name": "ckpts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3099,
                          "src": "5139:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                            "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 3155,
                        "indexExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3154,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3152,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3107,
                            "src": "5145:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 3153,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5152:1:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "5145:8:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5139:15:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref"
                        }
                      },
                      "id": 3156,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "votes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2944,
                      "src": "5139:21:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "id": 3157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5123:37:16",
                    "trueExpression": {
                      "hexValue": "30",
                      "id": 3150,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5135:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "functionReturnParameters": 3105,
                  "id": 3158,
                  "nodeType": "Return",
                  "src": "5116:44:16"
                }
              ]
            },
            "documentation": {
              "id": 3095,
              "nodeType": "StructuredDocumentation",
              "src": "3631:73:16",
              "text": " @dev Lookup a value in a list of (sorted) checkpoints."
            },
            "id": 3160,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkpointsLookup",
            "nameLocation": "3718:18:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3102,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3099,
                  "mutability": "mutable",
                  "name": "ckpts",
                  "nameLocation": "3758:5:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3160,
                  "src": "3737:26:16",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                    "typeString": "struct ERC20Votes.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3097,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 3096,
                        "name": "Checkpoint",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2945,
                        "src": "3737:10:16"
                      },
                      "referencedDeclaration": 2945,
                      "src": "3737:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$2945_storage_ptr",
                        "typeString": "struct ERC20Votes.Checkpoint"
                      }
                    },
                    "id": 3098,
                    "nodeType": "ArrayTypeName",
                    "src": "3737:12:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                      "typeString": "struct ERC20Votes.Checkpoint[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3101,
                  "mutability": "mutable",
                  "name": "blockNumber",
                  "nameLocation": "3773:11:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3160,
                  "src": "3765:19:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3100,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3765:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3736:49:16"
            },
            "returnParameters": {
              "id": 3105,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3104,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3160,
                  "src": "3808:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3103,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3808:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3807:9:16"
            },
            "scope": 3565,
            "src": "3709:1458:16",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              593
            ],
            "body": {
              "id": 3173,
              "nodeType": "Block",
              "src": "5309:51:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3168,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5287,
                          "src": "5329:10:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 3169,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5329:12:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3170,
                        "name": "delegatee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3163,
                        "src": "5343:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3167,
                      "name": "_delegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3371,
                      "src": "5319:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5319:34:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3172,
                  "nodeType": "ExpressionStatement",
                  "src": "5319:34:16"
                }
              ]
            },
            "documentation": {
              "id": 3161,
              "nodeType": "StructuredDocumentation",
              "src": "5173:70:16",
              "text": " @dev Delegate votes from the sender to `delegatee`."
            },
            "functionSelector": "5c19a95c",
            "id": 3174,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegate",
            "nameLocation": "5257:8:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3165,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5300:8:16"
            },
            "parameters": {
              "id": 3164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3163,
                  "mutability": "mutable",
                  "name": "delegatee",
                  "nameLocation": "5274:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3174,
                  "src": "5266:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3162,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5266:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5265:19:16"
            },
            "returnParameters": {
              "id": 3166,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5309:0:16"
            },
            "scope": 3565,
            "src": "5248:112:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              609
            ],
            "body": {
              "id": 3233,
              "nodeType": "Block",
              "src": "5619:392:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3195,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 3192,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967292,
                            "src": "5637:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 3193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "5637:15:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 3194,
                          "name": "expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3181,
                          "src": "5656:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5637:25:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230566f7465733a207369676e61747572652065787069726564",
                        "id": 3196,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5664:31:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_136d0f69bc85a5c125b5cc368e2880ebdb3c89d4d9828f6476431c386ea60257",
                          "typeString": "literal_string \"ERC20Votes: signature expired\""
                        },
                        "value": "ERC20Votes: signature expired"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_136d0f69bc85a5c125b5cc368e2880ebdb3c89d4d9828f6476431c386ea60257",
                          "typeString": "literal_string \"ERC20Votes: signature expired\""
                        }
                      ],
                      "id": 3191,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5629:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3197,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5629:67:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3198,
                  "nodeType": "ExpressionStatement",
                  "src": "5629:67:16"
                },
                {
                  "assignments": [
                    3200
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3200,
                      "mutability": "mutable",
                      "name": "signer",
                      "nameLocation": "5714:6:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3233,
                      "src": "5706:14:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3199,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5706:7:16",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3218,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 3207,
                                    "name": "_DELEGATION_TYPEHASH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2950,
                                    "src": "5788:20:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "id": 3208,
                                    "name": "delegatee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3177,
                                    "src": "5810:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3209,
                                    "name": "nonce",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3179,
                                    "src": "5821:5:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 3210,
                                    "name": "expiry",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3181,
                                    "src": "5828:6:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 3205,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967295,
                                    "src": "5777:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 3206,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encode",
                                  "nodeType": "MemberAccess",
                                  "src": "5777:10:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 3211,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5777:58:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 3204,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967288,
                              "src": "5767:9:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 3212,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5767:69:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 3203,
                          "name": "_hashTypedDataV4",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6227,
                          "src": "5750:16:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32) view returns (bytes32)"
                          }
                        },
                        "id": 3213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5750:87:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3214,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3183,
                        "src": "5851:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 3215,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3185,
                        "src": "5866:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 3216,
                        "name": "s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3187,
                        "src": "5881:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 3201,
                        "name": "ECDSA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5981,
                        "src": "5723:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ECDSA_$5981_$",
                          "typeString": "type(library ECDSA)"
                        }
                      },
                      "id": 3202,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5921,
                      "src": "5723:13:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                      }
                    },
                    "id": 3217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5723:169:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5706:186:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3220,
                          "name": "nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3179,
                          "src": "5910:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 3222,
                              "name": "signer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3200,
                              "src": "5929:6:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 3221,
                            "name": "_useNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3758,
                            "src": "5919:9:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 3223,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5919:17:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5910:26:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230566f7465733a20696e76616c6964206e6f6e6365",
                        "id": 3225,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5938:27:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1a23b43d95073d55a7380117ca03cace60cd22fee15d5cb140d51e46236e6872",
                          "typeString": "literal_string \"ERC20Votes: invalid nonce\""
                        },
                        "value": "ERC20Votes: invalid nonce"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1a23b43d95073d55a7380117ca03cace60cd22fee15d5cb140d51e46236e6872",
                          "typeString": "literal_string \"ERC20Votes: invalid nonce\""
                        }
                      ],
                      "id": 3219,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5902:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5902:64:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3227,
                  "nodeType": "ExpressionStatement",
                  "src": "5902:64:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3229,
                        "name": "signer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3200,
                        "src": "5986:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3230,
                        "name": "delegatee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3177,
                        "src": "5994:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3228,
                      "name": "_delegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3371,
                      "src": "5976:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5976:28:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3232,
                  "nodeType": "ExpressionStatement",
                  "src": "5976:28:16"
                }
              ]
            },
            "documentation": {
              "id": 3175,
              "nodeType": "StructuredDocumentation",
              "src": "5366:66:16",
              "text": " @dev Delegates votes from signer to `delegatee`"
            },
            "functionSelector": "c3cda520",
            "id": 3234,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegateBySig",
            "nameLocation": "5446:13:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3189,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5610:8:16"
            },
            "parameters": {
              "id": 3188,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3177,
                  "mutability": "mutable",
                  "name": "delegatee",
                  "nameLocation": "5477:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5469:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3176,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5469:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3179,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nameLocation": "5504:5:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5496:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3178,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5496:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3181,
                  "mutability": "mutable",
                  "name": "expiry",
                  "nameLocation": "5527:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5519:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3180,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5519:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3183,
                  "mutability": "mutable",
                  "name": "v",
                  "nameLocation": "5549:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5543:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3182,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5543:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3185,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "5568:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5560:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3184,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5560:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3187,
                  "mutability": "mutable",
                  "name": "s",
                  "nameLocation": "5587:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3234,
                  "src": "5579:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3186,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5579:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5459:135:16"
            },
            "returnParameters": {
              "id": 3190,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5619:0:16"
            },
            "scope": 3565,
            "src": "5437:574:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3246,
              "nodeType": "Block",
              "src": "6175:41:16",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 3242,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6197:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": {
                            "id": 3241,
                            "name": "uint224",
                            "nodeType": "ElementaryTypeName",
                            "src": "6197:7:16",
                            "typeDescriptions": {}
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          }
                        ],
                        "id": 3240,
                        "name": "type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967269,
                        "src": "6192:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 3243,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6192:13:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_meta_type_t_uint224",
                        "typeString": "type(uint224)"
                      }
                    },
                    "id": 3244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "max",
                    "nodeType": "MemberAccess",
                    "src": "6192:17:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "functionReturnParameters": 3239,
                  "id": 3245,
                  "nodeType": "Return",
                  "src": "6185:24:16"
                }
              ]
            },
            "documentation": {
              "id": 3235,
              "nodeType": "StructuredDocumentation",
              "src": "6017:91:16",
              "text": " @dev Maximum token supply. Defaults to `type(uint224).max` (2^224^ - 1)."
            },
            "id": 3247,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_maxSupply",
            "nameLocation": "6122:10:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3236,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6132:2:16"
            },
            "returnParameters": {
              "id": 3239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3238,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3247,
                  "src": "6166:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint224",
                    "typeString": "uint224"
                  },
                  "typeName": {
                    "id": 3237,
                    "name": "uint224",
                    "nodeType": "ElementaryTypeName",
                    "src": "6166:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6165:9:16"
            },
            "scope": 3565,
            "src": "6113:103:16",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2623
            ],
            "body": {
              "id": 3278,
              "nodeType": "Block",
              "src": "6379:211:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3259,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3250,
                        "src": "6401:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3260,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3252,
                        "src": "6410:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 3256,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "6389:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Votes_$3565_$",
                          "typeString": "type(contract super ERC20Votes)"
                        }
                      },
                      "id": 3258,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2623,
                      "src": "6389:11:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 3261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6389:28:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3262,
                  "nodeType": "ExpressionStatement",
                  "src": "6389:28:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3268,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 3264,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2303,
                            "src": "6435:11:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 3265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6435:13:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 3266,
                            "name": "_maxSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3247,
                            "src": "6452:10:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint224_$",
                              "typeString": "function () view returns (uint224)"
                            }
                          },
                          "id": 3267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6452:12:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "6435:29:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230566f7465733a20746f74616c20737570706c79207269736b73206f766572666c6f77696e6720766f746573",
                        "id": 3269,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6466:50:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_97859f657b3d95198b68f29ae96ee966779795bec3ef1e76700d2d39fefd7699",
                          "typeString": "literal_string \"ERC20Votes: total supply risks overflowing votes\""
                        },
                        "value": "ERC20Votes: total supply risks overflowing votes"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_97859f657b3d95198b68f29ae96ee966779795bec3ef1e76700d2d39fefd7699",
                          "typeString": "literal_string \"ERC20Votes: total supply risks overflowing votes\""
                        }
                      ],
                      "id": 3263,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6427:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3270,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6427:90:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3271,
                  "nodeType": "ExpressionStatement",
                  "src": "6427:90:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3273,
                        "name": "_totalSupplyCheckpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2964,
                        "src": "6545:23:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "id": 3274,
                        "name": "_add",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3550,
                        "src": "6570:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      {
                        "id": 3275,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3252,
                        "src": "6576:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3272,
                      "name": "_writeCheckpoint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3536,
                      "src": "6528:16:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,function (uint256,uint256) view returns (uint256),uint256) returns (uint256,uint256)"
                      }
                    },
                    "id": 3276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6528:55:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "id": 3277,
                  "nodeType": "ExpressionStatement",
                  "src": "6528:55:16"
                }
              ]
            },
            "documentation": {
              "id": 3248,
              "nodeType": "StructuredDocumentation",
              "src": "6222:78:16",
              "text": " @dev Snapshots the totalSupply after it has been increased."
            },
            "id": 3279,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "6314:5:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3254,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6370:8:16"
            },
            "parameters": {
              "id": 3253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3250,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "6328:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3279,
                  "src": "6320:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3249,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6320:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3252,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "6345:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3279,
                  "src": "6337:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6337:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6319:33:16"
            },
            "returnParameters": {
              "id": 3255,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6379:0:16"
            },
            "scope": 3565,
            "src": "6305:285:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2695
            ],
            "body": {
              "id": 3301,
              "nodeType": "Block",
              "src": "6753:116:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3291,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3282,
                        "src": "6775:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3292,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3284,
                        "src": "6784:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 3288,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "6763:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Votes_$3565_$",
                          "typeString": "type(contract super ERC20Votes)"
                        }
                      },
                      "id": 3290,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2695,
                      "src": "6763:11:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 3293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6763:28:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3294,
                  "nodeType": "ExpressionStatement",
                  "src": "6763:28:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3296,
                        "name": "_totalSupplyCheckpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2964,
                        "src": "6819:23:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "id": 3297,
                        "name": "_subtract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3564,
                        "src": "6844:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      {
                        "id": 3298,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3284,
                        "src": "6855:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                          "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3295,
                      "name": "_writeCheckpoint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3536,
                      "src": "6802:16:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,function (uint256,uint256) view returns (uint256),uint256) returns (uint256,uint256)"
                      }
                    },
                    "id": 3299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6802:60:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "id": 3300,
                  "nodeType": "ExpressionStatement",
                  "src": "6802:60:16"
                }
              ]
            },
            "documentation": {
              "id": 3280,
              "nodeType": "StructuredDocumentation",
              "src": "6596:78:16",
              "text": " @dev Snapshots the totalSupply after it has been decreased."
            },
            "id": 3302,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nameLocation": "6688:5:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3286,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6744:8:16"
            },
            "parameters": {
              "id": 3285,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3282,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "6702:7:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3302,
                  "src": "6694:15:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3281,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6694:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3284,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "6719:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3302,
                  "src": "6711:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3283,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6711:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6693:33:16"
            },
            "returnParameters": {
              "id": 3287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6753:0:16"
            },
            "scope": 3565,
            "src": "6679:190:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2805
            ],
            "body": {
              "id": 3331,
              "nodeType": "Block",
              "src": "7129:127:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3316,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3305,
                        "src": "7165:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3317,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3307,
                        "src": "7171:2:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3318,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3309,
                        "src": "7175:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 3313,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "7139:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Votes_$3565_$",
                          "typeString": "type(contract super ERC20Votes)"
                        }
                      },
                      "id": 3315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_afterTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2805,
                      "src": "7139:25:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 3319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7139:43:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3320,
                  "nodeType": "ExpressionStatement",
                  "src": "7139:43:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 3323,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3305,
                            "src": "7220:4:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3322,
                          "name": "delegates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3013,
                          "src": "7210:9:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                            "typeString": "function (address) view returns (address)"
                          }
                        },
                        "id": 3324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7210:15:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 3326,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3307,
                            "src": "7237:2:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 3325,
                          "name": "delegates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3013,
                          "src": "7227:9:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                            "typeString": "function (address) view returns (address)"
                          }
                        },
                        "id": 3327,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7227:13:16",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3328,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3309,
                        "src": "7242:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3321,
                      "name": "_moveVotingPower",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3442,
                      "src": "7193:16:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 3329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7193:56:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3330,
                  "nodeType": "ExpressionStatement",
                  "src": "7193:56:16"
                }
              ]
            },
            "documentation": {
              "id": 3303,
              "nodeType": "StructuredDocumentation",
              "src": "6875:122:16",
              "text": " @dev Move voting power when tokens are transferred.\n Emits a {DelegateVotesChanged} event."
            },
            "id": 3332,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterTokenTransfer",
            "nameLocation": "7011:19:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 3311,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7120:8:16"
            },
            "parameters": {
              "id": 3310,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3305,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "7048:4:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3332,
                  "src": "7040:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3304,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7040:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3307,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "7070:2:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3332,
                  "src": "7062:10:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3306,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7062:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3309,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "7090:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3332,
                  "src": "7082:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3308,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7082:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7030:72:16"
            },
            "returnParameters": {
              "id": 3312,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7129:0:16"
            },
            "scope": 3565,
            "src": "7002:254:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3370,
              "nodeType": "Block",
              "src": "7487:306:16",
              "statements": [
                {
                  "assignments": [
                    3341
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3341,
                      "mutability": "mutable",
                      "name": "currentDelegate",
                      "nameLocation": "7505:15:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3370,
                      "src": "7497:23:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3340,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7497:7:16",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3345,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 3343,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3335,
                        "src": "7533:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3342,
                      "name": "delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3013,
                      "src": "7523:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$",
                        "typeString": "function (address) view returns (address)"
                      }
                    },
                    "id": 3344,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7523:20:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7497:46:16"
                },
                {
                  "assignments": [
                    3347
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3347,
                      "mutability": "mutable",
                      "name": "delegatorBalance",
                      "nameLocation": "7561:16:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3370,
                      "src": "7553:24:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3346,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7553:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3351,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 3349,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3335,
                        "src": "7590:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3348,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2317,
                      "src": "7580:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 3350,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7580:20:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7553:47:16"
                },
                {
                  "expression": {
                    "id": 3356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3352,
                        "name": "_delegates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2954,
                        "src": "7610:10:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 3354,
                      "indexExpression": {
                        "id": 3353,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3335,
                        "src": "7621:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7610:21:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3355,
                      "name": "delegatee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3337,
                      "src": "7634:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7610:33:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3357,
                  "nodeType": "ExpressionStatement",
                  "src": "7610:33:16"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3359,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3335,
                        "src": "7675:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3360,
                        "name": "currentDelegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3341,
                        "src": "7686:15:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3361,
                        "name": "delegatee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3337,
                        "src": "7703:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3358,
                      "name": "DelegateChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 544,
                      "src": "7659:15:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 3362,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7659:54:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3363,
                  "nodeType": "EmitStatement",
                  "src": "7654:59:16"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 3365,
                        "name": "currentDelegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3341,
                        "src": "7741:15:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3366,
                        "name": "delegatee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3337,
                        "src": "7758:9:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3367,
                        "name": "delegatorBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3347,
                        "src": "7769:16:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3364,
                      "name": "_moveVotingPower",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3442,
                      "src": "7724:16:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 3368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7724:62:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3369,
                  "nodeType": "ExpressionStatement",
                  "src": "7724:62:16"
                }
              ]
            },
            "documentation": {
              "id": 3333,
              "nodeType": "StructuredDocumentation",
              "src": "7262:146:16",
              "text": " @dev Change delegation for `delegator` to `delegatee`.\n Emits events {DelegateChanged} and {DelegateVotesChanged}."
            },
            "id": 3371,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_delegate",
            "nameLocation": "7422:9:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3335,
                  "mutability": "mutable",
                  "name": "delegator",
                  "nameLocation": "7440:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3371,
                  "src": "7432:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3334,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7432:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3337,
                  "mutability": "mutable",
                  "name": "delegatee",
                  "nameLocation": "7459:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3371,
                  "src": "7451:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3336,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7451:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7431:38:16"
            },
            "returnParameters": {
              "id": 3339,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7487:0:16"
            },
            "scope": 3565,
            "src": "7413:380:16",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3441,
              "nodeType": "Block",
              "src": "7905:521:16",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 3382,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3380,
                        "name": "src",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3373,
                        "src": "7919:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "id": 3381,
                        "name": "dst",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3375,
                        "src": "7926:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "7919:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3383,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3377,
                        "src": "7933:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 3384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7942:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "7933:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7919:24:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3440,
                  "nodeType": "IfStatement",
                  "src": "7915:505:16",
                  "trueBody": {
                    "id": 3439,
                    "nodeType": "Block",
                    "src": "7945:475:16",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3387,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3373,
                            "src": "7963:3:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3390,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7978:1:16",
                                "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": 3389,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7970:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3388,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "7970:7:16",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3391,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7970:10:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "7963:17:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3412,
                        "nodeType": "IfStatement",
                        "src": "7959:221:16",
                        "trueBody": {
                          "id": 3411,
                          "nodeType": "Block",
                          "src": "7982:198:16",
                          "statements": [
                            {
                              "assignments": [
                                3394,
                                3396
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3394,
                                  "mutability": "mutable",
                                  "name": "oldWeight",
                                  "nameLocation": "8009:9:16",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3411,
                                  "src": "8001:17:16",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3393,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8001:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 3396,
                                  "mutability": "mutable",
                                  "name": "newWeight",
                                  "nameLocation": "8028:9:16",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3411,
                                  "src": "8020:17:16",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3395,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8020:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3404,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 3398,
                                      "name": "_checkpoints",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2960,
                                      "src": "8058:12:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                                        "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                                      }
                                    },
                                    "id": 3400,
                                    "indexExpression": {
                                      "id": 3399,
                                      "name": "src",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3373,
                                      "src": "8071:3:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "8058:17:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                                      "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                                    }
                                  },
                                  {
                                    "id": 3401,
                                    "name": "_subtract",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3564,
                                    "src": "8077:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  {
                                    "id": 3402,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3377,
                                    "src": "8088:6:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                                      "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                                    },
                                    {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3397,
                                  "name": "_writeCheckpoint",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3536,
                                  "src": "8041:16:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,function (uint256,uint256) view returns (uint256),uint256) returns (uint256,uint256)"
                                  }
                                },
                                "id": 3403,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8041:54:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "8000:95:16"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 3406,
                                    "name": "src",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3373,
                                    "src": "8139:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3407,
                                    "name": "oldWeight",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3394,
                                    "src": "8144:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 3408,
                                    "name": "newWeight",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3396,
                                    "src": "8155:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3405,
                                  "name": "DelegateVotesChanged",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 553,
                                  "src": "8118:20:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256,uint256)"
                                  }
                                },
                                "id": 3409,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8118:47:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3410,
                              "nodeType": "EmitStatement",
                              "src": "8113:52:16"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3413,
                            "name": "dst",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3375,
                            "src": "8198:3:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3416,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8213:1:16",
                                "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": 3415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8205:7:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3414,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8205:7:16",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 3417,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8205:10:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "8198:17:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3438,
                        "nodeType": "IfStatement",
                        "src": "8194:216:16",
                        "trueBody": {
                          "id": 3437,
                          "nodeType": "Block",
                          "src": "8217:193:16",
                          "statements": [
                            {
                              "assignments": [
                                3420,
                                3422
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3420,
                                  "mutability": "mutable",
                                  "name": "oldWeight",
                                  "nameLocation": "8244:9:16",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3437,
                                  "src": "8236:17:16",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3419,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8236:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 3422,
                                  "mutability": "mutable",
                                  "name": "newWeight",
                                  "nameLocation": "8263:9:16",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3437,
                                  "src": "8255:17:16",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3421,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8255:7:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3430,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 3424,
                                      "name": "_checkpoints",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2960,
                                      "src": "8293:12:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_$",
                                        "typeString": "mapping(address => struct ERC20Votes.Checkpoint storage ref[] storage ref)"
                                      }
                                    },
                                    "id": 3426,
                                    "indexExpression": {
                                      "id": 3425,
                                      "name": "dst",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3375,
                                      "src": "8306:3:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "8293:17:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                                      "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                                    }
                                  },
                                  {
                                    "id": 3427,
                                    "name": "_add",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3550,
                                    "src": "8312:4:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  {
                                    "id": 3428,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3377,
                                    "src": "8318:6:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage",
                                      "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage ref"
                                    },
                                    {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3423,
                                  "name": "_writeCheckpoint",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3536,
                                  "src": "8276:16:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                    "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,function (uint256,uint256) view returns (uint256),uint256) returns (uint256,uint256)"
                                  }
                                },
                                "id": 3429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8276:49:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                  "typeString": "tuple(uint256,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "8235:90:16"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 3432,
                                    "name": "dst",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3375,
                                    "src": "8369:3:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3433,
                                    "name": "oldWeight",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3420,
                                    "src": "8374:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 3434,
                                    "name": "newWeight",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3422,
                                    "src": "8385:9:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3431,
                                  "name": "DelegateVotesChanged",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 553,
                                  "src": "8348:20:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256,uint256)"
                                  }
                                },
                                "id": 3435,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8348:47:16",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3436,
                              "nodeType": "EmitStatement",
                              "src": "8343:52:16"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "id": 3442,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_moveVotingPower",
            "nameLocation": "7808:16:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3378,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3373,
                  "mutability": "mutable",
                  "name": "src",
                  "nameLocation": "7842:3:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3442,
                  "src": "7834:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3372,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7834:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3375,
                  "mutability": "mutable",
                  "name": "dst",
                  "nameLocation": "7863:3:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3442,
                  "src": "7855:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3374,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7855:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3377,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "7884:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3442,
                  "src": "7876:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3376,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7876:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7824:72:16"
            },
            "returnParameters": {
              "id": 3379,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7905:0:16"
            },
            "scope": 3565,
            "src": "7799:627:16",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 3535,
              "nodeType": "Block",
              "src": "8640:423:16",
              "statements": [
                {
                  "assignments": [
                    3466
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3466,
                      "mutability": "mutable",
                      "name": "pos",
                      "nameLocation": "8658:3:16",
                      "nodeType": "VariableDeclaration",
                      "scope": 3535,
                      "src": "8650:11:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3465,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8650:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3469,
                  "initialValue": {
                    "expression": {
                      "id": 3467,
                      "name": "ckpts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3446,
                      "src": "8664:5:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                        "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                      }
                    },
                    "id": 3468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "8664:12:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8650:26:16"
                },
                {
                  "expression": {
                    "id": 3482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3470,
                      "name": "oldWeight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3461,
                      "src": "8686:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3471,
                          "name": "pos",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3466,
                          "src": "8698:3:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 3472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8705:1:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "8698:8:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 3475,
                            "name": "ckpts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3446,
                            "src": "8713:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                              "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                            }
                          },
                          "id": 3479,
                          "indexExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3478,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3476,
                              "name": "pos",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3466,
                              "src": "8719:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 3477,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8725:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "8719:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8713:14:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                            "typeString": "struct ERC20Votes.Checkpoint storage ref"
                          }
                        },
                        "id": 3480,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "votes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2944,
                        "src": "8713:20:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "id": 3481,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "8698:35:16",
                      "trueExpression": {
                        "hexValue": "30",
                        "id": 3474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8709:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "src": "8686:47:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3483,
                  "nodeType": "ExpressionStatement",
                  "src": "8686:47:16"
                },
                {
                  "expression": {
                    "id": 3489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3484,
                      "name": "newWeight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3463,
                      "src": "8743:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 3486,
                          "name": "oldWeight",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3461,
                          "src": "8758:9:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 3487,
                          "name": "delta",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3458,
                          "src": "8769:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 3485,
                        "name": "op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3456,
                        "src": "8755:2:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) view returns (uint256)"
                        }
                      },
                      "id": 3488,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8755:20:16",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8743:32:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3490,
                  "nodeType": "ExpressionStatement",
                  "src": "8743:32:16"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3493,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3491,
                        "name": "pos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3466,
                        "src": "8790:3:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 3492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8796:1:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "8790:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "baseExpression": {
                            "id": 3494,
                            "name": "ckpts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3446,
                            "src": "8801:5:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                              "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                            }
                          },
                          "id": 3498,
                          "indexExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3497,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 3495,
                              "name": "pos",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3466,
                              "src": "8807:3:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 3496,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8813:1:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "8807:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8801:14:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                            "typeString": "struct ERC20Votes.Checkpoint storage ref"
                          }
                        },
                        "id": 3499,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "fromBlock",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2942,
                        "src": "8801:24:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "id": 3500,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967292,
                          "src": "8829:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 3501,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "src": "8829:12:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "8801:40:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "8790:51:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 3533,
                    "nodeType": "Block",
                    "src": "8926:131:16",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 3523,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967292,
                                        "src": "8992:5:16",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 3524,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "number",
                                      "nodeType": "MemberAccess",
                                      "src": "8992:12:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 3521,
                                      "name": "SafeCast",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6745,
                                      "src": "8974:8:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SafeCast_$6745_$",
                                        "typeString": "type(library SafeCast)"
                                      }
                                    },
                                    "id": 3522,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "toUint32",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6480,
                                    "src": "8974:17:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint32_$",
                                      "typeString": "function (uint256) pure returns (uint32)"
                                    }
                                  },
                                  "id": 3525,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8974:31:16",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 3528,
                                      "name": "newWeight",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3463,
                                      "src": "9033:9:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 3526,
                                      "name": "SafeCast",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6745,
                                      "src": "9014:8:16",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SafeCast_$6745_$",
                                        "typeString": "type(library SafeCast)"
                                      }
                                    },
                                    "id": 3527,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "toUint224",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 6380,
                                    "src": "9014:18:16",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint224_$",
                                      "typeString": "function (uint256) pure returns (uint224)"
                                    }
                                  },
                                  "id": 3529,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9014:29:16",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint224",
                                    "typeString": "uint224"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  },
                                  {
                                    "typeIdentifier": "t_uint224",
                                    "typeString": "uint224"
                                  }
                                ],
                                "id": 3520,
                                "name": "Checkpoint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2945,
                                "src": "8951:10:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Checkpoint_$2945_storage_ptr_$",
                                  "typeString": "type(struct ERC20Votes.Checkpoint storage pointer)"
                                }
                              },
                              "id": 3530,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "fromBlock",
                                "votes"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "8951:94:16",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$2945_memory_ptr",
                                "typeString": "struct ERC20Votes.Checkpoint memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Checkpoint_$2945_memory_ptr",
                                "typeString": "struct ERC20Votes.Checkpoint memory"
                              }
                            ],
                            "expression": {
                              "id": 3517,
                              "name": "ckpts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3446,
                              "src": "8940:5:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                                "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 3519,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "8940:10:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$_t_struct$_Checkpoint_$2945_storage_$returns$__$bound_to$_t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr_$",
                              "typeString": "function (struct ERC20Votes.Checkpoint storage ref[] storage pointer,struct ERC20Votes.Checkpoint storage ref)"
                            }
                          },
                          "id": 3531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8940:106:16",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3532,
                        "nodeType": "ExpressionStatement",
                        "src": "8940:106:16"
                      }
                    ]
                  },
                  "id": 3534,
                  "nodeType": "IfStatement",
                  "src": "8786:271:16",
                  "trueBody": {
                    "id": 3516,
                    "nodeType": "Block",
                    "src": "8843:77:16",
                    "statements": [
                      {
                        "expression": {
                          "id": 3514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 3504,
                                "name": "ckpts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3446,
                                "src": "8857:5:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                                  "typeString": "struct ERC20Votes.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 3508,
                              "indexExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3505,
                                  "name": "pos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3466,
                                  "src": "8863:3:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 3506,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8869:1:16",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "8863:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8857:14:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$2945_storage",
                                "typeString": "struct ERC20Votes.Checkpoint storage ref"
                              }
                            },
                            "id": 3509,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "votes",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2944,
                            "src": "8857:20:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 3512,
                                "name": "newWeight",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3463,
                                "src": "8899:9:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 3510,
                                "name": "SafeCast",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6745,
                                "src": "8880:8:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_SafeCast_$6745_$",
                                  "typeString": "type(library SafeCast)"
                                }
                              },
                              "id": 3511,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint224",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6380,
                              "src": "8880:18:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint224_$",
                                "typeString": "function (uint256) pure returns (uint224)"
                              }
                            },
                            "id": 3513,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8880:29:16",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "8857:52:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "id": 3515,
                        "nodeType": "ExpressionStatement",
                        "src": "8857:52:16"
                      }
                    ]
                  }
                }
              ]
            },
            "id": 3536,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_writeCheckpoint",
            "nameLocation": "8441:16:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3459,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3446,
                  "mutability": "mutable",
                  "name": "ckpts",
                  "nameLocation": "8488:5:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3536,
                  "src": "8467:26:16",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                    "typeString": "struct ERC20Votes.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3444,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 3443,
                        "name": "Checkpoint",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2945,
                        "src": "8467:10:16"
                      },
                      "referencedDeclaration": 2945,
                      "src": "8467:10:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$2945_storage_ptr",
                        "typeString": "struct ERC20Votes.Checkpoint"
                      }
                    },
                    "id": 3445,
                    "nodeType": "ArrayTypeName",
                    "src": "8467:12:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$2945_storage_$dyn_storage_ptr",
                      "typeString": "struct ERC20Votes.Checkpoint[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3456,
                  "mutability": "mutable",
                  "name": "op",
                  "nameLocation": "8553:2:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3536,
                  "src": "8503:52:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                    "typeString": "function (uint256,uint256) view returns (uint256)"
                  },
                  "typeName": {
                    "id": 3455,
                    "nodeType": "FunctionTypeName",
                    "parameterTypes": {
                      "id": 3451,
                      "nodeType": "ParameterList",
                      "parameters": [
                        {
                          "constant": false,
                          "id": 3448,
                          "mutability": "mutable",
                          "name": "",
                          "nameLocation": "-1:-1:-1",
                          "nodeType": "VariableDeclaration",
                          "scope": 3455,
                          "src": "8512:7:16",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3447,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "8512:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        },
                        {
                          "constant": false,
                          "id": 3450,
                          "mutability": "mutable",
                          "name": "",
                          "nameLocation": "-1:-1:-1",
                          "nodeType": "VariableDeclaration",
                          "scope": 3455,
                          "src": "8521:7:16",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3449,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "8521:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "src": "8511:18:16"
                    },
                    "returnParameterTypes": {
                      "id": 3454,
                      "nodeType": "ParameterList",
                      "parameters": [
                        {
                          "constant": false,
                          "id": 3453,
                          "mutability": "mutable",
                          "name": "",
                          "nameLocation": "-1:-1:-1",
                          "nodeType": "VariableDeclaration",
                          "scope": 3455,
                          "src": "8544:7:16",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 3452,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "8544:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "src": "8543:9:16"
                    },
                    "src": "8503:52:16",
                    "stateMutability": "view",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                      "typeString": "function (uint256,uint256) view returns (uint256)"
                    },
                    "visibility": "internal"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3458,
                  "mutability": "mutable",
                  "name": "delta",
                  "nameLocation": "8573:5:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3536,
                  "src": "8565:13:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3457,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8565:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8457:127:16"
            },
            "returnParameters": {
              "id": 3464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3461,
                  "mutability": "mutable",
                  "name": "oldWeight",
                  "nameLocation": "8610:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3536,
                  "src": "8602:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3460,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8602:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3463,
                  "mutability": "mutable",
                  "name": "newWeight",
                  "nameLocation": "8629:9:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3536,
                  "src": "8621:17:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3462,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8621:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8601:38:16"
            },
            "scope": 3565,
            "src": "8432:631:16",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 3549,
              "nodeType": "Block",
              "src": "9136:29:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3545,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3538,
                      "src": "9153:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 3546,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3540,
                      "src": "9157:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9153:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3544,
                  "id": 3548,
                  "nodeType": "Return",
                  "src": "9146:12:16"
                }
              ]
            },
            "id": 3550,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_add",
            "nameLocation": "9078:4:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3541,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3538,
                  "mutability": "mutable",
                  "name": "a",
                  "nameLocation": "9091:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3550,
                  "src": "9083:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3537,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9083:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3540,
                  "mutability": "mutable",
                  "name": "b",
                  "nameLocation": "9102:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3550,
                  "src": "9094:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3539,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9094:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9082:22:16"
            },
            "returnParameters": {
              "id": 3544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3543,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3550,
                  "src": "9127:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3542,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9127:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9126:9:16"
            },
            "scope": 3565,
            "src": "9069:96:16",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 3563,
              "nodeType": "Block",
              "src": "9243:29:16",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3559,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3552,
                      "src": "9260:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 3560,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3554,
                      "src": "9264:1:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9260:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3558,
                  "id": 3562,
                  "nodeType": "Return",
                  "src": "9253:12:16"
                }
              ]
            },
            "id": 3564,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_subtract",
            "nameLocation": "9180:9:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3552,
                  "mutability": "mutable",
                  "name": "a",
                  "nameLocation": "9198:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3564,
                  "src": "9190:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3551,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9190:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3554,
                  "mutability": "mutable",
                  "name": "b",
                  "nameLocation": "9209:1:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 3564,
                  "src": "9201:9:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3553,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9201:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9189:22:16"
            },
            "returnParameters": {
              "id": 3558,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3557,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3564,
                  "src": "9234:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3556,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9234:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9233:9:16"
            },
            "scope": 3565,
            "src": "9171:101:16",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "scope": 3566,
        "src": "1253:8021:16",
        "usedErrors": []
      }
    ],
    "src": "121:9154:16"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.11+commit.d7f03943.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.4",
  "updatedAt": "2022-03-06T23:47:11.026Z",
  "devdoc": {
    "details": "Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's, and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1. NOTE: If exact COMP compatibility is required, use the {ERC20VotesComp} variant of this module. This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting power can be queried through the public accessors {getVotes} and {getPastVotes}. By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked. _Available since v4.2._",
    "kind": "dev",
    "methods": {
      "DOMAIN_SEPARATOR()": {
        "details": "See {IERC20Permit-DOMAIN_SEPARATOR}."
      },
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "checkpoints(address,uint32)": {
        "details": "Get the `pos`-th checkpoint for `account`."
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "delegate(address)": {
        "details": "Delegate votes from the sender to `delegatee`."
      },
      "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": {
        "details": "Delegates votes from signer to `delegatee`"
      },
      "delegates(address)": {
        "details": "Get the address `account` is currently delegating to."
      },
      "getPastTotalSupply(uint256)": {
        "details": "Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances. It is but NOT the sum of all the delegated votes! Requirements: - `blockNumber` must have been already mined"
      },
      "getPastVotes(address,uint256)": {
        "details": "Retrieve the number of votes for `account` at the end of `blockNumber`. Requirements: - `blockNumber` must have been already mined"
      },
      "getVotes(address)": {
        "details": "Gets the current votes balance for `account`"
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "nonces(address)": {
        "details": "See {IERC20Permit-nonces}."
      },
      "numCheckpoints(address)": {
        "details": "Get number of checkpoints for `account`."
      },
      "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": {
        "details": "See {IERC20Permit-permit}."
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transfer(address,uint256)": {
        "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}