{
  "contractName": "GenesisProtocol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_stakingToken",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_organization",
          "type": "address"
        }
      ],
      "name": "CancelProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_voter",
          "type": "address"
        }
      ],
      "name": "CancelVoting",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_confidenceThreshold",
          "type": "uint256"
        }
      ],
      "name": "ConfidenceLevelChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_decision",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_totalReputation",
          "type": "uint256"
        }
      ],
      "name": "ExecuteProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "ExpirationCallBounty",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "enum GenesisProtocolLogic.ExecutionState",
          "name": "_executionState",
          "type": "uint8"
        }
      ],
      "name": "GPExecuteProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_numOfChoices",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_proposer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_paramsHash",
          "type": "bytes32"
        }
      ],
      "name": "NewProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Redeem",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "RedeemDaoBounty",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "RedeemReputation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_vote",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Stake",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "enum GenesisProtocolLogic.ProposalState",
          "name": "_proposalState",
          "type": "uint8"
        }
      ],
      "name": "StateChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_organization",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_voter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_vote",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_reputation",
          "type": "uint256"
        }
      ],
      "name": "VoteProposal",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "DELEGATION_HASH_EIP712",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "NO",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "NUM_OF_CHOICES",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "YES",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "averagesDownstakesOfBoosted",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "executeBoosted",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "expirationCallBounty",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256[11]",
          "name": "_params",
          "type": "uint256[11]"
        },
        {
          "internalType": "address",
          "name": "_voteOnBehalf",
          "type": "address"
        }
      ],
      "name": "getParametersHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "orgBoostedProposalsCnt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "organizations",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "parameters",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "queuedVoteRequiredPercentage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "queuedVotePeriodLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "boostedVotePeriodLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "preBoostedVotePeriodLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "thresholdConst",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitExponentValue",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "quietEndingPeriod",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "proposingRepReward",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "votersReputationLossRatio",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minimumDaoBounty",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "daoBountyConst",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "activationTime",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "voteOnBehalf",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "proposals",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "organizationId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callbacks",
          "type": "address"
        },
        {
          "internalType": "enum GenesisProtocolLogic.ProposalState",
          "name": "state",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "winningVote",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "proposer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentBoostedVotePeriodLimit",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "paramsHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "daoBountyRemain",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "daoBounty",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalStakes",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "confidenceThreshold",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expirationCallBountyPercentage",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "daoRedeemItsWinnings",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "proposalsCnt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_paramsHash",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_proposer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_organization",
          "type": "address"
        }
      ],
      "name": "propose",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "uint256[3]",
          "name": "rewards",
          "type": "uint256[3]"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "name": "redeemDaoBounty",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "redeemedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "potentialAmount",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256[11]",
          "name": "_params",
          "type": "uint256[11]"
        },
        {
          "internalType": "address",
          "name": "_voteOnBehalf",
          "type": "address"
        }
      ],
      "name": "setParameters",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "shouldBoost",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "stakesNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "stakingToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_paramsHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_organizationId",
          "type": "bytes32"
        }
      ],
      "name": "threshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_vote",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "stake",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_vote",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_signatureType",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "stakeWithSignature",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_vote",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_voter",
          "type": "address"
        }
      ],
      "name": "vote",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "cancelVote",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "getNumberOfChoices",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "getProposalTimes",
      "outputs": [
        {
          "internalType": "uint256[3]",
          "name": "times",
          "type": "uint256[3]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_voter",
          "type": "address"
        }
      ],
      "name": "voteInfo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_choice",
          "type": "uint256"
        }
      ],
      "name": "voteStatus",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "isVotable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "proposalStatus",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "getProposalOrganization",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_staker",
          "type": "address"
        }
      ],
      "name": "getStaker",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_vote",
          "type": "uint256"
        }
      ],
      "name": "voteStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "winningVote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum GenesisProtocolLogic.ProposalState",
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isAbstainAllow",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getAllowedRangeOfChoices",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proposalId",
          "type": "bytes32"
        }
      ],
      "name": "score",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_stakingToken\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_organization\",\"type\":\"address\"}],\"name\":\"CancelProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"CancelVoting\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_confidenceThreshold\",\"type\":\"uint256\"}],\"name\":\"ConfidenceLevelChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_decision\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalReputation\",\"type\":\"uint256\"}],\"name\":\"ExecuteProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"ExpirationCallBounty\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enum GenesisProtocolLogic.ExecutionState\",\"name\":\"_executionState\",\"type\":\"uint8\"}],\"name\":\"GPExecuteProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numOfChoices\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_proposer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_paramsHash\",\"type\":\"bytes32\"}],\"name\":\"NewProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"RedeemDaoBounty\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"RedeemReputation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_staker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_vote\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Stake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enum GenesisProtocolLogic.ProposalState\",\"name\":\"_proposalState\",\"type\":\"uint8\"}],\"name\":\"StateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_organization\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_vote\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_reputation\",\"type\":\"uint256\"}],\"name\":\"VoteProposal\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DELEGATION_HASH_EIP712\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"NO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"NUM_OF_CHOICES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"YES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"averagesDownstakesOfBoosted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"cancelVote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"executeBoosted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"expirationCallBounty\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAllowedRangeOfChoices\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"getNumberOfChoices\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256[11]\",\"name\":\"_params\",\"type\":\"uint256[11]\"},{\"internalType\":\"address\",\"name\":\"_voteOnBehalf\",\"type\":\"address\"}],\"name\":\"getParametersHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"getProposalOrganization\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"getProposalTimes\",\"outputs\":[{\"internalType\":\"uint256[3]\",\"name\":\"times\",\"type\":\"uint256[3]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_staker\",\"type\":\"address\"}],\"name\":\"getStaker\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isAbstainAllow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"isVotable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"orgBoostedProposalsCnt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"organizations\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"parameters\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"queuedVoteRequiredPercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"queuedVotePeriodLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"boostedVotePeriodLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preBoostedVotePeriodLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thresholdConst\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitExponentValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quietEndingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposingRepReward\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votersReputationLossRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumDaoBounty\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"daoBountyConst\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"activationTime\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"voteOnBehalf\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"proposalStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"proposals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"organizationId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callbacks\",\"type\":\"address\"},{\"internalType\":\"enum GenesisProtocolLogic.ProposalState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"winningVote\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentBoostedVotePeriodLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"paramsHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"daoBountyRemain\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"daoBounty\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStakes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"confidenceThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expirationCallBountyPercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"daoRedeemItsWinnings\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalsCnt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_paramsHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_proposer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_organization\",\"type\":\"address\"}],\"name\":\"propose\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256[3]\",\"name\":\"rewards\",\"type\":\"uint256[3]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"redeemDaoBounty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"redeemedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"potentialAmount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"score\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256[11]\",\"name\":\"_params\",\"type\":\"uint256[11]\"},{\"internalType\":\"address\",\"name\":\"_voteOnBehalf\",\"type\":\"address\"}],\"name\":\"setParameters\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"shouldBoost\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_vote\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_vote\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_signatureType\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"stakeWithSignature\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakesNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stakingToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"state\",\"outputs\":[{\"internalType\":\"enum GenesisProtocolLogic.ProposalState\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_paramsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_organizationId\",\"type\":\"bytes32\"}],\"name\":\"threshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_vote\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"voteInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_vote\",\"type\":\"uint256\"}],\"name\":\"voteStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_choice\",\"type\":\"uint256\"}],\"name\":\"voteStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposalId\",\"type\":\"bytes32\"}],\"name\":\"winningVote\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"cancelVote(bytes32)\":{\"details\":\"Cancel the vote of the msg.sender. cancel vote is not allow in genesisProtocol so this function doing nothing. This function is here in order to comply to the IntVoteInterface .\"},\"constructor\":{\"details\":\"Constructor\"},\"execute(bytes32)\":{\"details\":\"execute check if the proposal has been decided, and if so, execute the proposal\",\"params\":{\"_proposalId\":\"the id of the proposal\"},\"return\":\"bool true - the proposal has been executed             false - otherwise.\"},\"executeBoosted(bytes32)\":{\"details\":\"executeBoosted try to execute a boosted or QuietEndingPeriod proposal if it is expired\",\"params\":{\"_proposalId\":\"the id of the proposal\"},\"return\":\"uint256 expirationCallBounty the bounty amount for the expiration call\"},\"getAllowedRangeOfChoices()\":{\"details\":\"getAllowedRangeOfChoices returns the allowed range of choices for a voting machine.\",\"return\":\"min - minimum number of choices max - maximum number of choices\"},\"getNumberOfChoices(bytes32)\":{\"details\":\"getNumberOfChoices returns the number of choices possible in this proposal\",\"return\":\"uint256 that contains number of choices\"},\"getParametersHash(uint256[11],address)\":{\"details\":\"hashParameters returns a hash of the given parameters\"},\"getProposalOrganization(bytes32)\":{\"details\":\"getProposalOrganization return the organizationId for a given proposal\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"bytes32 organization identifier\"},\"getProposalTimes(bytes32)\":{\"details\":\"getProposalTimes returns proposals times variables.\",\"params\":{\"_proposalId\":\"id of the proposal\"},\"return\":\"proposals times array\"},\"getStaker(bytes32,address)\":{\"details\":\"getStaker return the vote and stake amount for a given proposal and staker\",\"params\":{\"_proposalId\":\"the ID of the proposal\",\"_staker\":\"staker address\"},\"return\":\"uint256 voteuint256 amount\"},\"isAbstainAllow()\":{\"details\":\"isAbstainAllow returns if the voting machine allow abstain (0)\",\"return\":\"bool true or false\"},\"isVotable(bytes32)\":{\"details\":\"isVotable check if the proposal is votable\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"bool true or false\"},\"proposalStatus(bytes32)\":{\"details\":\"proposalStatus return the total votes and stakes for a given proposal\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"uint256 preBoostedVotes YESuint256 preBoostedVotes NOuint256 total stakes YESuint256 total stakes NO\"},\"propose(uint256,bytes32,address,address)\":{\"details\":\"register a new proposal with the given parameters. Every proposal has a unique ID which is being generated by calculating keccak256 of a incremented counter.\",\"params\":{\"_organization\":\"address\",\"_paramsHash\":\"parameters hash\",\"_proposer\":\"address\"}},\"redeem(bytes32,address)\":{\"details\":\"redeem a reward for a successful stake, vote or proposing. The function use a beneficiary address as a parameter (and not msg.sender) to enable users to redeem on behalf of someone else.\",\"params\":{\"_beneficiary\":\"- the beneficiary address\",\"_proposalId\":\"the ID of the proposal\"},\"return\":\"rewards -          [0] stakerTokenReward          [1] voterReputationReward          [2] proposerReputationReward\"},\"redeemDaoBounty(bytes32,address)\":{\"details\":\"redeemDaoBounty a reward for a successful stake. The function use a beneficiary address as a parameter (and not msg.sender) to enable users to redeem on behalf of someone else.\",\"params\":{\"_beneficiary\":\"- the beneficiary address\",\"_proposalId\":\"the ID of the proposal\"},\"return\":\"redeemedAmount - redeem token amountpotentialAmount - potential redeem token amount(if there is enough tokens bounty at the organization )\"},\"score(bytes32)\":{\"details\":\"score return the proposal score\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"uint256 proposal score.\"},\"setParameters(uint256[11],address)\":{\"details\":\"hash the parameters, save them if necessary, and return the hash value\",\"params\":{\"_params\":\"a parameters array   _params[0] - _queuedVoteRequiredPercentage,   _params[1] - _queuedVotePeriodLimit, //the time limit for a proposal to be in an absolute voting mode.   _params[2] - _boostedVotePeriodLimit, //the time limit for a proposal to be in an relative voting mode.   _params[3] - _preBoostedVotePeriodLimit, //the time limit for a proposal to be in an preparation                 state (stable) before boosted.   _params[4] -_thresholdConst   _params[5] -_quietEndingPeriod   _params[6] -_proposingRepReward   _params[7] -_votersReputationLossRatio   _params[8] -_minimumDaoBounty   _params[9] -_daoBountyConst   _params[10] -_activationTime\",\"_voteOnBehalf\":\"- authorized to vote on behalf of others.\"}},\"shouldBoost(bytes32)\":{\"details\":\"shouldBoost check if a proposal should be shifted to boosted phase.\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"bool true or false.\"},\"stake(bytes32,uint256,uint256)\":{\"details\":\"staking function\",\"params\":{\"_amount\":\"the betting amount\",\"_proposalId\":\"id of the proposal\",\"_vote\":\"NO(2) or YES(1).\"},\"return\":\"bool true - the proposal has been executed             false - otherwise.\"},\"stakeWithSignature(bytes32,uint256,uint256,uint256,uint256,bytes)\":{\"details\":\"stakeWithSignature function\",\"params\":{\"_amount\":\"the betting amount\",\"_nonce\":\"nonce value ,it is part of the signature to ensure that a signature can be received only once.\",\"_proposalId\":\"id of the proposal\",\"_signature\":\"- signed data by the staker\",\"_signatureType\":\"signature type 1 - for web3.eth.sign 2 - for eth_signTypedData according to EIP #712.\",\"_vote\":\"NO(2) or YES(1).\"},\"return\":\"bool true - the proposal has been executed             false - otherwise.\"},\"state(bytes32)\":{\"details\":\"voteStake return the state for a given proposal\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"ProposalState proposal state\"},\"threshold(bytes32,bytes32)\":{\"details\":\"threshold return the organization's score threshold which required by a proposal to shift to boosted state. This threshold is dynamically set and it depend on the number of boosted proposal.\",\"params\":{\"_organizationId\":\"the organization identifier\",\"_paramsHash\":\"the organization parameters hash\"},\"return\":\"uint256 organization's score threshold as real number.\"},\"vote(bytes32,uint256,uint256,address)\":{\"details\":\"voting function\",\"params\":{\"_amount\":\"the reputation amount to vote with . if _amount == 0 it will use all voter reputation.\",\"_proposalId\":\"id of the proposal\",\"_vote\":\"NO(2) or YES(1).\",\"_voter\":\"voter address\"},\"return\":\"bool true - the proposal has been executed             false - otherwise.\"},\"voteInfo(bytes32,address)\":{\"details\":\"voteInfo returns the vote and the amount of reputation of the user committed to this proposal\",\"params\":{\"_proposalId\":\"the ID of the proposal\",\"_voter\":\"the address of the voter\"},\"return\":\"uint256 vote - the voters vote       uint256 reputation - amount of reputation committed by _voter to _proposalId\"},\"voteStake(bytes32,uint256)\":{\"details\":\"voteStake return the amount stakes for a given proposal and vote\",\"params\":{\"_proposalId\":\"the ID of the proposal\",\"_vote\":\"vote number\"},\"return\":\"uint256 stake amount\"},\"voteStatus(bytes32,uint256)\":{\"details\":\"voteStatus returns the reputation voted for a proposal for a specific voting choice.\",\"params\":{\"_choice\":\"the index in the\",\"_proposalId\":\"the ID of the proposal\"},\"return\":\"voted reputation for the given choice\"},\"winningVote(bytes32)\":{\"details\":\"voteStake return the winningVote for a given proposal\",\"params\":{\"_proposalId\":\"the ID of the proposal\"},\"return\":\"uint256 winningVote\"}},\"title\":\"GenesisProtocol implementation -an organization's voting machine scheme.\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@daostack/infra/contracts/votingMachines/GenesisProtocol.sol\":\"GenesisProtocol\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@daostack/infra/contracts/libs/RealMath.sol\":{\"keccak256\":\"0x3ee79c4b483da327916ac36f9d5cc6a1f2f0363db3ad06793ec67f46e1f653db\",\"urls\":[\"bzz-raw://19b423aa16b93e414c50ca513caabc0f1cb835f31deec82d85d9bb31c0f8d5fb\",\"dweb:/ipfs/QmS8gjtT3jxxoNAosJf6QSStFAE2KZLhNA1Qq9MXwT2CnN\"]},\"@daostack/infra/contracts/votingMachines/GenesisProtocol.sol\":{\"keccak256\":\"0x0321da6019e0e1a7fc4e1ca484d7d5d376805abb17f9eb9c46a6731e9dfe58dc\",\"urls\":[\"bzz-raw://a245bc547655b1157fa33198e66fdc8470bcf20a6c56c12b2a02eec28f998849\",\"dweb:/ipfs/QmUsbHxWU5A8SJuDdKDMChu855X9KEqJjaZpTaVQG4W8Wq\"]},\"@daostack/infra/contracts/votingMachines/GenesisProtocolLogic.sol\":{\"keccak256\":\"0x2bf5fba64fbda5605b9250ea8ca6d8e28dab41fb0e2b43c9145b91e1d0425eef\",\"urls\":[\"bzz-raw://3b34c1f70c2b98d4f3add9264700f60cb3deed47610e010f3d4ac112ab107930\",\"dweb:/ipfs/QmY46SXZnKJeUmbsSfwkW1zNh1YP4FHUjAbVJUJXqhKNwV\"]},\"@daostack/infra/contracts/votingMachines/IntVoteInterface.sol\":{\"keccak256\":\"0x877991da94b1fe9c2accf69367b32fff474c4e4f7897e9cf5a61fa5d1378908f\",\"urls\":[\"bzz-raw://4ea2c35248b82ea74884313752870789de61b0bcbc14425e97192b1ef1450e5a\",\"dweb:/ipfs/QmZ9RxpmG6SsMLJm1hT9ZmVy3CVPNZyRihQxZFDk8u3w1G\"]},\"@daostack/infra/contracts/votingMachines/ProposalExecuteInterface.sol\":{\"keccak256\":\"0xb80a153793e1723b35e70ba1c3800975fbc1fae63c989cfb8134a4e58085e181\",\"urls\":[\"bzz-raw://7ea97373ca977623d4c480c1d03e0853b1b34d59df4928ef72548987b2943899\",\"dweb:/ipfs/QmZ1MmDX4ExZ1iEo9gFp3SHfpNjWoLHS9nVhFkTRokgoLS\"]},\"@daostack/infra/contracts/votingMachines/VotingMachineCallbacksInterface.sol\":{\"keccak256\":\"0xec215d305f0aa5a5193b6f0302a1aa6bb84e85460167f80b261faf9d30564563\",\"urls\":[\"bzz-raw://8edb25b20c86a28b5c7c7c3a918f219106a1d3047933984dd76e33e30911857d\",\"dweb:/ipfs/Qme1iBcLjPPrC6jMF56cSE9pmEdCQ23aT43wQbnqKjXEYe\"]},\"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0xb48974d92a87053dc1d6c5389f3d1b2ad522dec23afcb508eaa935d98dfdc0b6\",\"urls\":[\"bzz-raw://4ca542b4b005c3fa1b4e145f86cefc50cd5eb11e7df0d3b6daca5328a075f090\",\"dweb:/ipfs/QmQFNcoXCZvEPt2WWueAYvaMns16VdN6VvdPdEbUav876u\"]},\"openzeppelin-solidity/contracts/math/Math.sol\":{\"keccak256\":\"0x37605dd0606b349cfb1b679892e1bb0ef4ddc16dedb06e229cc4402610a7a848\",\"urls\":[\"bzz-raw://c44b0c7fe0523f3f9a10d2924d7d7137b1349b1e71cd4be57550e185a098ca55\",\"dweb:/ipfs/QmbBLBCBPpqna3QZTiomSwyBdtt5Ua9DqkFgYicMd7Coya\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzz-raw://a3c2d9f046beebab7fb41b1b124a6a124a36f510f7c67365861402ac831bdc71\",\"dweb:/ipfs/QmUtASRgitregbKH83anopLtF9vFQe3BKeAjhUa6F7t9YV\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200412e3803806200412e833981810160405260208110156200003757600080fd5b5051806200006573543ff227f64aa17ea132bf9886cab5db55dcaddf620000bb602090811b62003f6e17901c565b156200009757600680546001600160a01b03191673543ff227f64aa17ea132bf9886cab5db55dcaddf179055620000b3565b600680546001600160a01b0319166001600160a01b0383161790555b5050620000c1565b3b151590565b61405d80620000d16000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c806372f702f31161013b578063b4512913116100b8578063c8f526e81161007c578063c8f526e81461085f578063cc3bf9e9146108b4578063e5af18c5146108e0578063e751f271146108fd578063fb6c0cbb1461091a5761023d565b8063b4512913146107c8578063ba51b14e146107eb578063bb5a05ed14610808578063beda801514610825578063c0835106146108425761023d565b80639525c0cc116100ff5780639525c0cc1461075e5780639bc5689d1461033c578063a003651d1461077d578063a05ea6e41461079a578063b2449d65146107c05761023d565b806372f702f31461067457806379a1c1f61461069857806380f5e0a1146106db57806388737b5e146106f85780638894c41b146107325761023d565b806330ca0a53116101c95780635142bc1e1161018d5780635142bc1e146105d457806351d997b2146105dc57806361d585da146105e45780636359036b1461062557806370743768146106515761023d565b806330ca0a531461043a57806332ed5b1214610442578063359afa49146104f05780633c13381814610528578063488c65fc146105455761023d565b806316db51721161021057806316db5172146103895780631702ef0c146103b557806321b4b3dc146103d25780632d598e58146103da5780632daedd52146103fd5761023d565b8063025068041461024257806307b4e1e3146102cd5780630d4834421461033c578063119ce91b14610344575b600080fd5b61025f6004803603602081101561025857600080fd5b5035610937565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e08801526101008701526101208601526101408501526101608401526001600160a01b031661018083015251908190036101a00190f35b61032a60048036036101808110156102e457600080fd5b81019080806101600190600b806020026040519081016040528092919082600b602002808284376000920191909152509194505050356001600160a01b031690506109a7565b60408051918252519081900360200190f35b61032a610ab8565b6103706004803603604081101561035a57600080fd5b50803590602001356001600160a01b0316610abd565b6040805192835260208301919091528051918290030190f35b6103706004803603604081101561039f57600080fd5b50803590602001356001600160a01b0316610b20565b61032a600480360360208110156103cb57600080fd5b5035610b51565b61032a610b63565b61032a600480360360408110156103f057600080fd5b5080359060200135610b69565b6104266004803603606081101561041357600080fd5b5080359060208101359060400135610bb6565b604080519115158252519081900360200190f35b61032a610bcc565b61045f6004803603602081101561045857600080fd5b5035610c78565b604080518e81526001600160a01b038e1660208201529081018c600681111561048457fe5b60ff168152602081019b909b52506001600160a01b039098166040808b019190915260608a0197909752608089019590955260a088019390935260c087019190915260e08601526101008501526101208401529015156101408301525190819003610160019350915050f35b6104266004803603608081101561050657600080fd5b50803590602081013590604081013590606001356001600160a01b0316610ce6565b61032a6004803603602081101561053e57600080fd5b5035610e0b565b610426600480360360c081101561055b57600080fd5b8135916020810135916040820135916060810135916080820135919081019060c0810160a082013564010000000081111561059557600080fd5b8201836020820111156105a757600080fd5b803590602001918460018302840111640100000000831117156105c957600080fd5b509092509050610e20565b6103706110bc565b6104266110c4565b610601600480360360208110156105fa57600080fd5b50356110ca565b6040518082600681111561061157fe5b60ff16815260200191505060405180910390f35b6103706004803603604081101561063b57600080fd5b50803590602001356001600160a01b03166110ea565b61032a6004803603604081101561066757600080fd5b5080359060200135611365565b61067c611386565b604080516001600160a01b039092168252519081900360200190f35b6106b5600480360360208110156106ae57600080fd5b5035611395565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610426600480360360208110156106f157600080fd5b50356113d8565b61032a6004803603608081101561070e57600080fd5b508035906020810135906001600160a01b0360408201358116916060013516611515565b61032a600480360361018081101561074957600080fd5b506001600160a01b03610160820135166118f9565b61077b6004803603602081101561077457600080fd5b5035611ce6565b005b61032a6004803603602081101561079357600080fd5b5035611cfd565b61032a600480360360208110156107b057600080fd5b50356001600160a01b0316611d03565b61032a611d15565b61032a600480360360408110156107de57600080fd5b5080359060200135611d1a565b61067c6004803603602081101561080157600080fd5b5035611d3b565b61032a6004803603602081101561081e57600080fd5b5035611d56565b61032a6004803603602081101561083b57600080fd5b5035611d68565b6104266004803603602081101561085857600080fd5b5035611fe3565b61087c6004803603602081101561087557600080fd5b5035611fee565b6040518082606080838360005b838110156108a1578181015183820152602001610889565b5050505090500191505060405180910390f35b61087c600480360360408110156108ca57600080fd5b50803590602001356001600160a01b031661203d565b61032a600480360360208110156108f657600080fd5b50356127f7565b6104266004803603602081101561091357600080fd5b5035612802565b61032a6004803603602081101561093057600080fd5b5035612827565b600060208190529081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989997989697959694959394929391929091906001600160a01b03168d565b60008281602002015183600160200201518460026020020151856003602002015186600460200201518760056020020151886006602002015189600760200201518a600860200201518b600960200201518c600a6020020151604051602001808c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001208260405160200180838152602001826001600160a01b03166001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012090505b92915050565b600281565b600080610ac8613de3565b50505060009182526001602081815260408085206001600160a01b039490941685526011909301815292829020825160608101845281548082529282015494810185905260029091015460ff16151592019190915291565b60009182526001602081815260408085206001600160a01b0394909416855260139093019052912080549101549091565b60009081526001602052604090205490565b60055481565b6000818152600260209081526040808320548584529183905282206005810154821115610b9857806005015491505b6004810154610bad908363ffffffff61283916565b95945050505050565b6000610bc484848433612883565b949350505050565b604080517f616464726573732047656e6573697350726f746f636f6c41646472657373000060208083019190915271189e5d195ccccc88141c9bdc1bdcd85b125960721b603e8301526b75696e7432353620566f746560a01b60508301527475696e7432353620416d6f756e74546f5374616b6560581b605c8301526c75696e74323536204e6f6e636560981b60718301528251605e818403018152607e909201909252805191012081565b600160208190526000918252604090912080549181015460028201546003830154600484015460058501546006860154600787015460088801546009890154600a8a0154600e909a01546001600160a01b03808b169b60ff600160a01b909c048c169b99909116989091168d565b600084610cf281612c74565b610cfb57600080fd5b6000868152600160205260409020610d11613e06565b5060058082015460009081526020818152604080832081516101a0810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301529283015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c909201546001600160a01b0316610180830181905215610def578161018001516001600160a01b0316336001600160a01b031614610de857600080fd5b5084610df2565b50335b610dfe89828a8a612ce7565b9998505050505050505050565b60009081526001602052604090206002015490565b6000808460021415610f435750604080517f616464726573732047656e6573697350726f746f636f6c41646472657373000060208083019190915271189e5d195ccccc88141c9bdc1bdcd85b125960721b603e8301526b75696e7432353620566f746560a01b60508301527475696e7432353620416d6f756e74546f5374616b6560581b605c8301526c75696e74323536204e6f6e636560981b60718301528251605e818403018152607e830184528051908201203060601b609e84015260b283018c905260d283018b905260f283018a90526101128084018a9052845180850390910181526101328401855280519083012061015284019190915261017280840191909152835180840390910181526101929092019092528051910120610f94565b604080513060601b602080830191909152603482018c9052605482018b9052607482018a905260948083018a90528351808403909101815260b49092019092528051910120610f91906132c9565b90505b6000610fde85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505063ffffffff61331a169050565b90506001600160a01b03811661103b576040805162461bcd60e51b815260206004820152601a60248201527f7374616b657220616464726573732063616e6e6f742062652030000000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260076020526040902054871461105f57600080fd5b6001600160a01b03811660009081526007602052604090205461108990600163ffffffff6133eb16565b6001600160a01b0382166000908152600760205260409020556110ae8a8a8a84612883565b9a9950505050505050505050565b600160029091565b60005b90565b60009081526001602081905260409091200154600160a01b900460ff1690565b6000828152600160205260408120819060026001820154600160a01b900460ff16600681111561111657fe5b1461112057600080fd5b60028082015460009081526012830160209081526040808320546001600160a01b0389168452601386019092529091209182015490919015801590611169575060028301548154145b8015611179575060018360020154145b801561118457508115155b156111a0578183600701548260020154028161119c57fe5b0493505b83158015906112355750600183015460065460408051636b8eb40360e01b81526001600160a01b039283166004820152602481018b9052905187939290921691636b8eb40391604480820192602092909190829003018186803b15801561120657600080fd5b505afa15801561121a573d6000803e3d6000fd5b505050506040513d602081101561123057600080fd5b505110155b1561135b57600060028201556006830154611256908563ffffffff6133fd16565b60068085019190915560018401549054604080516317d4ebe560e31b81526001600160a01b039283166004820152898316602482015260448101889052606481018b90529051919092169163bea75f289160848083019260209291908290030181600087803b1580156112c857600080fd5b505af11580156112dc573d6000803e3d6000fd5b505050506040513d60208110156112f257600080fd5b50516112fd57600080fd5b8254600090815260036020908152604091829020548251878152925196975087966001600160a01b03808b16949216928b927fb4a37163ec93e05e09b62e52f7f2ea8cfde431802edede7dfebe53d2ad969dbb929081900390910190a45b5050509250929050565b60009182526001602090815260408084209284526012909201905290205490565b6006546001600160a01b031681565b6000908152600160208181526040808420838552601081018352818520546002808752838720549587526012909201909352818520549085529320549093919291565b60006113e2613e77565b60008381526001602081815260409283902083516101c08101855281548152928101546001600160a01b038116928401929092529192830190600160a01b900460ff16600681111561143057fe5b600681111561143b57fe5b8152600282015460208201526003808301546001600160a01b0316604080840191909152600484015460608085019190915260058501546080850152600685015460a0850152600785015460c0850152600885015460e08501526009850154610100850152600a8501546101208501528151908101918290526101409093019291600b85019182845b8154815260200190600101908083116114c4575050509183525050600e919091015460ff16151560209091015260c0810151815191925061150491610b69565b61150d84613412565b119392505050565b6000838152602081905260408120600b0154421161156b576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd081858dd1a5d99481e595d60921b604482015290519081900360640190fd5b6000848152602081905260409020546032111561158757600080fd5b600554604080513060601b60208083019190915260348083018590528351808403909101815260549092019092528051910120906115cc90600163ffffffff6133eb16565b6005556115d7613e77565b33602082810182905260408051606093841b818401526bffffffffffffffffffffffff1988851b16603482015281516028818303018152604890910182528051908301208452600381850181905261018085015142905260008a815280845282812060029081015460a08801526001600160a01b038b811660808901529587015260c086018b9052855181529252902054166116ca576001600160a01b0384166116a0578051600090815260036020526040902080546001600160a01b031916331790556116ca565b8051600090815260036020526040902080546001600160a01b0319166001600160a01b0386161790555b8051600090815260046020908152604080832054898452918390528220600a015461170d916064916117019163ffffffff61345316565b9063ffffffff61347a16565b6000888152602081905260409020600901549091508110156117455760008781526020819052604090206009015460e083015261174d565b60e082018190525b60e0820151610120830152600083815260016020818152604092839020855181559085015191810180546001600160a01b0319166001600160a01b03909316929092178083559285015185939192909160ff60a01b1916600160a01b8360068111156117b557fe5b0217905550606082015160028201556080820151600380830180546001600160a01b0319166001600160a01b039093169290921790915560a0830151600483015560c0830151600583015560e08301516006830155610100830151600783015561012083015160088301556101408301516009830155610160830151600a83015561018083015161184b91600b84019190613ef8565b506101a09190910151600e909101805460ff191691151591909117905560e08201516000848152600160209081526040808320600280855260129091018352818420949094558551835260038252918290205482519384526001600160a01b038a8116928501929092528383018b9052915191169185917f75b4ff136cc5de5957574c797de3334eb1c141271922b825eb071e0487ba2c5c916060908290030190a350909695505050505050565b6000606483351180159061190f57506032833510155b61194a5760405162461bcd60e51b8152600401808060200182810382526029815260200180613fcd6029913960400191505060405180910390fd5b613e8060808401351180159061196557506103e86080840135115b6119b6576040805162461bcd60e51b815260206004820152601e60248201527f31303030203c207468726573686f6c64436f6e7374203c3d2031363030300000604482015290519081900360640190fd5b606460e08401351115611a10576040805162461bcd60e51b815260206004820181905260248201527f766f7465727352657075746174696f6e4c6f7373526174696f203c3d20313030604482015290519081900360640190fd5b60a083013560408401351015611a575760405162461bcd60e51b815260040180806020018281038252602b815260200180613fa2602b913960400191505060405180910390fd5b610100830135611aae576040805162461bcd60e51b815260206004820152601e60248201527f6d696e696d756d44616f426f756e74792073686f756c64206265203e20300000604482015290519081900360640190fd5b610120830135611b05576040805162461bcd60e51b815260206004820152601c60248201527f64616f426f756e7479436f6e73742073686f756c64206265203e203000000000604482015290519081900360640190fd5b6000611b3b84600b806020026040519081016040528092919082600b602002808284376000920191909152508691506109a79050565b905060ac60026107d05b613e80811015611b8d57608087013581108015611b69575060028102608088013511155b15611b7f57818381611b7757fe5b049250611b8d565b600190910190600202611b45565b50604080516101a0810182528735815260208089013590820152878201359181019190915260608088013590820152608080820190611bda908901356001600160d81b03166103e861349c565b81526020810184905260a088810135604083015260c0808a0135606084015260e0808b013560808501526101008b0135928401929092526101208a0135908301520187600a6020908102919091013582526001600160a01b03978816918101919091526000858152808252604090819020835181559183015160018301558201516002820155606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b82015561018090910151600c90910180546001600160a01b0319169190961617909455509392505050565b80611cf081612c74565b611cf957600080fd5b5050565b50600290565b60076020526000908152604090205481565b600181565b6000918252600160209081526040808420928452600f909201905290205490565b6003602052600090815260409020546001600160a01b031681565b60046020526000908152604090205481565b600081815260016020526040812060056001820154600160a01b900460ff166006811115611d9257fe5b1480611db7575060066001820154600160a01b900460ff166006811115611db557fe5b145b611df25760405162461bcd60e51b8152600401808060200182810382526033815260200180613ff66033913960400191505060405180910390fd5b611dfb836134bf565b611e4c576040805162461bcd60e51b815260206004820152601760248201527f70726f706f73616c206e65656420746f20657870697265000000000000000000604482015290519081900360640190fd5b6000611e90611e82600f611701611e75600b87016001015460048801549063ffffffff6133eb16565b429063ffffffff6133fd16565b60019063ffffffff6133eb16565b90506064811115611e9f575060645b600a820181905560016000908152601283016020526040902054611ed19060649061170190849063ffffffff61345316565b6006546040805163a9059cbb60e01b81523360048201526024810184905290519295506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b158015611f2857600080fd5b505af1158015611f3c573d6000803e3d6000fd5b505050506040513d6020811015611f5257600080fd5b5051611fa5576040805162461bcd60e51b815260206004820152601d60248201527f7472616e7366657220746f206d73672e73656e646572206661696c6564000000604482015290519081900360640190fd5b604080518481529051339186917f7468017f6ff596af88244327e88fe691ac48cc1db88b033d11c335f2c7ccdd039181900360200190a35050919050565b6000610ab282612c74565b611ff6613f36565b60008281526001602052604090819020815160608101909252600b0160038282826020028201915b81548152602001906001019080831161201e5750505050509050919050565b612045613f36565b600083815260016020526040902060026001820154600160a01b900460ff16600681111561206f57fe5b14806120935750600180820154600160a01b900460ff16600681111561209157fe5b145b6120ce5760405162461bcd60e51b815260040180806020018281038252602d815260200180613f75602d913960400191505060405180910390fd5b6120d6613e06565b5060058082015460009081526020818152604080832081516101a08101835281548152600180830154948201949094526002808301549382019390935260038201546060820152600482015460808201529481015460a0860152600681015460c0860152600781015460e086015260088101546101008601526009810154610120860152600a810154610140860152600b810154610160860152600c01546001600160a01b031661018085015284015414156121a55750600260009081526010830160205260409020546121ba565b50600160009081526010830160205260409020545b60646121d48361010001518361345390919063ffffffff16565b816121db57fe5b6001600160a01b038716600090815260138601602090815260408083206001845260128901909252808320546002845290832054949093049450929091612228919063ffffffff6133eb16565b600286015460009081526012870160205260409020546001840154919250901561234d5760016000908152601287016020526040812054600a88015461228c9161227f91606491611701919063ffffffff61345316565b849063ffffffff6133fd16565b9050600180880154600160a01b900460ff1660068111156122a957fe5b14156122bb5760018401548852612344565b6002870154845414156123445783546001141561232257808760070154101561231d5760006122f78860070154836133fd90919063ffffffff16565b90508261231182876001015461345390919063ffffffff16565b8161231857fe5b048952505b612344565b60018401548290612339908363ffffffff61345316565b8161234057fe5b0488525b50600060018401555b600e86015460ff1615801561237d575085546000908152600360205260409020546001600160a01b038981169116145b80156123a25750600180870154600160a01b900460ff16600681111561239f57fe5b14155b80156123b2575060028660020154145b1561240f5760078601546123fd906123f1836123d4838763ffffffff61345316565b816123db57fe5b048a60005b60200201519063ffffffff6133eb16565b9063ffffffff6133fd16565b8752600e8601805460ff191660011790555b6001600160a01b038816600090815260118701602052604090206001810154158015906124405750600281015460ff165b1561251b57600180880154600160a01b900460ff16600681111561246057fe5b1415612496576064612484876101000151836001015461345390919063ffffffff16565b8161248b57fe5b046020890152612513565b8054600288015414156125135760028701546000908152601088016020526040902054600182015461250d91906124d3908863ffffffff61345316565b816124da57fe5b0460646124f9896101000151856001015461345390919063ffffffff16565b8161250057fe5b049063ffffffff6133eb16565b60208901525b600060018201555b60038701546001600160a01b038a8116911614801561253e575060018760020154145b8015612556575060038701546001600160a01b031615155b156125785760e086015160408901526003870180546001600160a01b03191690555b8751156126c5578751600888015461258f916133fd565b600888015560065488516040805163a9059cbb60e01b81526001600160a01b038d8116600483015260248201939093529051919092169163a9059cbb9160448083019260209291908290030181600087803b1580156125ed57600080fd5b505af1158015612601573d6000803e3d6000fd5b505050506040513d602081101561261757600080fd5b505161266a576040805162461bcd60e51b815260206004820152601e60248201527f7472616e7366657220746f2062656e6566696369617279206661696c65640000604482015290519081900360640190fd5b8654600090815260036020908152604091829020548a51835190815292516001600160a01b038d8116949216928e927f6d26871c9f457d104b2122485f659f126f7a0cf6938cf20482c03f49794a2fbf929081900390910190a45b60408801516126d6908960016123e0565b156127ea5760018701546001600160a01b031663d29b5d2f6127018a600260200201518b60016123e0565b8b8d6040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561275957600080fd5b505af115801561276d573d6000803e3d6000fd5b505050506040513d602081101561278357600080fd5b505086546000908152600360205260409020546001600160a01b03808b1691168b7f7419b736daacf66d5c1645948c956fca2b83be1e2e02d486d65713f289d683b86127d88c600260200201518d60016123e0565b60408051918252519081900360200190a45b5050505050505092915050565b6000610ab282613412565b60008161280e81612c74565b61281757600080fd5b612820836134bf565b9392505050565b60026020526000908152604090205481565b60008282650100000000005b8115610bad578160011660011415612864576128618184613d4e565b90505b60019190911c90811561287e5761287b8384613d4e565b92505b612845565b6000600284111580156128965750600084115b6128da576040805162461bcd60e51b815260206004820152601060248201526f77726f6e6720766f74652076616c756560801b604482015290519081900360640190fd5b6000831161292f576040805162461bcd60e51b815260206004820152601b60248201527f7374616b696e6720616d6f756e742073686f756c64206265203e300000000000604482015290519081900360640190fd5b612938856134bf565b1561294557506001610bc4565b600085815260016020526040902060046001820154600160a01b900460ff16600681111561296f57fe5b14158015612997575060036001820154600160a01b900460ff16600681111561299457fe5b14155b156129a6576000915050610bc4565b6001600160a01b038316600090815260138201602052604090206001810154158015906129d4575080548614155b156129e457600092505050610bc4565b600654604080516323b872dd60e01b81526001600160a01b038781166004830152306024830152604482018990529151889392909216916323b872dd916064808201926020929091908290030181600087803b158015612a4357600080fd5b505af1158015612a57573d6000803e3d6000fd5b505050506040513d6020811015612a6d57600080fd5b5051612ac0576040805162461bcd60e51b815260206004820152601960248201527f6661696c207472616e736665722066726f6d207374616b657200000000000000604482015290519081900360640190fd5b6008830154612ad5908263ffffffff6133eb16565b60088401556001820154612aef908263ffffffff6133eb16565b60018301819055600160801b1015612b4e576040805162461bcd60e51b815260206004820152601a60248201527f7374616b696e6720616d6f756e7420697320746f6f2068696768000000000000604482015290519081900360640190fd5b600160801b83600801541115612bab576040805162461bcd60e51b815260206004820152601860248201527f746f74616c207374616b657320697320746f6f20686967680000000000000000604482015290519081900360640190fd5b6001871415612bcf576002820154612bc9908263ffffffff6133eb16565b60028301555b8682556000878152601284016020526040902054612bf490829063ffffffff6133eb16565b60008881526012850160209081526040808320939093558554825260038152908290205482518a815291820189905282516001600160a01b03808a16949216928c927fd0239d7d4acf51def4507fa173be466927de5d75d8b10d840cd6994d6e10231092918290030190a4612c68886134bf565b98975050505050505050565b600081815260016020819052604082200154600160a01b900460ff166004816006811115612c9e57fe5b1480612cb557506005816006811115612cb357fe5b145b80612ccb57506006816006811115612cc957fe5b145b8061282057506003816006811115612cdf57fe5b149392505050565b600060028311158015612cfa5750600083115b612d3c576040805162461bcd60e51b815260206004820152600e60248201526d18101e102fbb37ba32901e1e901960911b604482015290519081900360640190fd5b612d45856134bf565b15612d5257506001610bc4565b612d5a613e06565b506000858152600160208181526040808420600580820154865285845282862083516101a0810185528154815281870154818701526002820154818601526003820154606082015260048083015460808301529282015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c909101546001600160a01b039081166101808301528c8852868652958301548451634ac41bc760e11b81528c881693810193909352602483018d905293519096929592949390921692639588378e92604480840193829003018186803b158015612e6157600080fd5b505afa158015612e75573d6000803e3d6000fd5b505050506040513d6020811015612e8b57600080fd5b5051905080612ee1576040805162461bcd60e51b815260206004820152601b60248201527f5f766f746572206d75737420686176652072657075746174696f6e0000000000604482015290519081900360640190fd5b84811015612f2b576040805162461bcd60e51b8152602060048201526012602482015271072657075746174696f6e203e3d205f7265760741b604482015290519081900360640190fd5b8480612f345750805b6001600160a01b038816600090815260118401602052604090206001015415612f64576000945050505050610bc4565b6000878152600f84016020526040902054612f8690829063ffffffff6133eb16565b6000888152600f8501602052604080822083905560028601548252812054908990521080612fde57506002808401546000908152600f8501602052604080822054928252902054148015612fde575060018360020154145b156130985760056001840154600160a01b900460ff166006811115612fff57fe5b14801561301f575060c0840151604085015103600b840160010154420310155b80613043575060066001840154600160a01b900460ff16600681111561304157fe5b145b156130905760066001840154600160a01b900460ff16600681111561306457fe5b146130895760c0840151600484015560018301805460ff60a01b1916600360a11b1790555b42600c8401555b600283018790555b604080516060810182528881526020810183905290810160046001860154600160a01b900460ff1660068111156130cb57fe5b14806130f0575060036001860154600160a01b900460ff1660068111156130ee57fe5b145b151590526001600160a01b0389166000908152601185016020908152604091829020835181559083015160018201559101516002909101805460ff191691151591909117905560046001840154600160a01b900460ff16600681111561315257fe5b1480613177575060036001840154600160a01b900460ff16600681111561317557fe5b145b1561326457600087815260108401602052604090205461319e90829063ffffffff6133eb16565b60008881526010850160205260408120919091556101008501516064906131cb908463ffffffff61345316565b816131d257fe5b600186015460408051637c0fc5fb60e11b815293909204600484018190526001600160a01b038d81166024860152604485018f9052925190945091169163f81f8bf69160648083019260209291908290030181600087803b15801561323657600080fd5b505af115801561324a573d6000803e3d6000fd5b505050506040513d602081101561326057600080fd5b5050505b82546000908152600360209081526040918290205482518a815291820184905282516001600160a01b03808d16949216928d927f066c061a3792cb3eb64a441a928655fcbafb4a54b49725fe9cd2951df5e7189e92918290030190a4610dfe896134bf565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008060008084516041146133355760009350505050610ab2565b50505060208201516040830151606084015160001a601b81101561335757601b015b8060ff16601b1415801561336f57508060ff16601c14155b156133805760009350505050610ab2565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa1580156133d7573d6000803e3d6000fd5b505050602060405103519350505050610ab2565b60008282018381101561282057600080fd5b60008282111561340c57600080fd5b50900390565b60008181526001602081815260408084206002855260128101909252808420549284528320549091612820916001600160d81b03169063ffffffff61349c16565b60008261346257506000610ab2565b8282028284828161346f57fe5b041461282057600080fd5b600080821161348857600080fd5b600082848161349357fe5b04949350505050565b60006128206001600160d81b038085166501000000000090810291851602613db2565b6000816134cb81612c74565b6134d457600080fd5b60008381526001602052604090206134ea613e06565b506005808201546000908152602081815260409182902082516101a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600482015460808201529181015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c01546001600160a01b031661018082015261359e613e77565b604080516101c0810182528454815260018501546001600160a01b03811660208301529091859190830190600160a01b900460ff1660068111156135de57fe5b60068111156135e957fe5b8152600282015460208201526003808301546001600160a01b0316604080840191909152600484015460608085019190915260058501546080850152600685015460a0850152600785015460c0850152600885015460e08501526009850154610100850152600a8501546101208501528151908101918290526101409093019291600b85019182845b815481526020019060010190808311613672575050509183525050600e919091015460ff16151560209182015260018501546040805163b551c37360e01b8152600481018b905290519394506000936001600160a01b039092169263b551c37392602480840193829003018186803b1580156136ed57600080fd5b505afa158015613701573d6000803e3d6000fd5b505050506040513d602081101561371757600080fd5b5051835160028601546000908152600f870160205260408120549293506064840490910291819081908410156137c45760036001890154600160a01b900460ff16600681111561376357fe5b141561377257600192506137a2565b60046001890154600160a01b900460ff16600681111561378e57fe5b141561379d57600392506137a2565b600592505b6001880180546002919060ff60a01b1916600160a01b835b0217905550613a0b565b60036001890154600160a01b900460ff1660068111156137e057fe5b1415613862576020870151600b89015442031061381b5760018801805460ff60a01b1916600160a01b17905560028089018190559250613862565b61382d88600501548960000154610b69565b9050806138398c613412565b11156138625760018801805460ff60a01b1916600160a21b17905542600d890155600988018190555b60046001890154600160a01b900460ff16600681111561387e57fe5b1415613a0b5761389688600501548960000154610b69565b6060880151909150600b89016002015442031061397c57806138b78c613412565b111561395b5787546000908152600260205260409020546110001115613956576001888101805460ff60a01b1916600560a01b17905542600c8a01558854600090815260026020818152604080842080549095019094558b54835260048152838320548282528484205492845260128d019091529290912054919350908390038161393e57fe5b89546000908152600460205260409020919005830190555b613977565b6001880180546003919060ff60a01b1916600160a01b836137ba565b613a0b565b60006139878c613412565b60098a015490915061399f908363ffffffff613dcd16565b81116139bf5760018901805460ff60a01b1916600360a01b179055613a09565b8089600901541115613a0957600989018290556040805183815290518d917fad767d61af51c7895fa3cc0497dde01afb610c74e55ee4d8a71fa5e3ee136d54919081900360200190a25b505b60056001890154600160a01b900460ff166006811115613a2757fe5b1480613a4c575060066001890154600160a01b900460ff166006811115613a4a57fe5b145b15613a7c576004880154600c890154420310613a7c5760018801805460ff60a01b1916600160a11b179055600492505b6000836005811115613a8a57fe5b14613ca8576004836005811115613a9d57fe5b1480613ab457506005836005811115613ab257fe5b145b15613b6f578551600090815260026020526040902054613adb90600163ffffffff6133fd16565b86516000908152600260205260408082209290925587518152205480613b11578854600090815260046020526040812055613b6d565b88546000908152600460209081526040808320546002845260128d01909252909120549093508190613b50906123f1866001850163ffffffff61345316565b81613b5757fe5b8a54600090815260046020526040902091900490555b505b87546000908152600360209081526040918290205460028b0154835190815291820188905282516001600160a01b03909116928e927f37471b9c9d295ffb1309ad070b8964700bfb7b555e8e8292d0b6cbc7dba35d10929081900390910190a38a7f46a713b994c752c68fbefa9048bec9a0010cc7d933ad95a3c3dbb25931a167e78460405180826005811115613c0257fe5b60ff16815260200191505060405180910390a26001880154600289015460408051639d4c162d60e01b8152600481018f90526024810192909252516001600160a01b0390921691639d4c162d916044808201926020929091908290030181600087803b158015613c7157600080fd5b505af1158015613c85573d6000803e3d6000fd5b505050506040513d6020811015613c9b57600080fd5b5050600688015460078901555b6001880154600160a01b900460ff166006811115613cc257fe5b86604001516006811115613cd257fe5b14613d2f578a7f21aca7f0285ccddeca2935074d3e36b5ab8fea0327f84cbbf12cf1b6d1a749f98960010160149054906101000a900460ff1660405180826006811115613d1b57fe5b60ff16815260200191505060405180910390a25b6000836005811115613d3d57fe5b14159b9a5050505050505050505050565b600082820282848281613d5d57fe5b0414613da8576040805162461bcd60e51b81526020600482015260156024820152745265616c4d617468206d756c206f766572666c6f7760581b604482015290519081900360640190fd5b60281c9392505050565b60008165010000000000840281613dc557fe5b049392505050565b6000818310613ddc5781612820565b5090919050565b604051806060016040528060008152602001600081526020016000151581525090565b604051806101a0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b604080516101c081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160008152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001613eeb613f36565b8152600060209091015290565b8260038101928215613f26579160200282015b82811115613f26578251825591602001919060010190613f0b565b50613f32929150613f54565b5090565b60405180606001604052806003906020820280388339509192915050565b6110c791905b80821115613f325760008155600101613f5a565b3b15159056fe50726f706f73616c2073686f756c64206265204578656375746564206f722045787069726564496e5175657565626f6f73746564566f7465506572696f644c696d6974203e3d207175696574456e64696e67506572696f643530203c3d20717565756564566f7465526571756972656450657263656e74616765203c3d2031303070726f706f73616c20737461746520696e206e6f7420426f6f73746564206e6f72205175696574456e64696e67506572696f64a265627a7a723158200dae3035bae67808c8a891e3143b4e582b23249221f9dc36ce15010d8672901d64736f6c63430005100032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061023d5760003560e01c806372f702f31161013b578063b4512913116100b8578063c8f526e81161007c578063c8f526e81461085f578063cc3bf9e9146108b4578063e5af18c5146108e0578063e751f271146108fd578063fb6c0cbb1461091a5761023d565b8063b4512913146107c8578063ba51b14e146107eb578063bb5a05ed14610808578063beda801514610825578063c0835106146108425761023d565b80639525c0cc116100ff5780639525c0cc1461075e5780639bc5689d1461033c578063a003651d1461077d578063a05ea6e41461079a578063b2449d65146107c05761023d565b806372f702f31461067457806379a1c1f61461069857806380f5e0a1146106db57806388737b5e146106f85780638894c41b146107325761023d565b806330ca0a53116101c95780635142bc1e1161018d5780635142bc1e146105d457806351d997b2146105dc57806361d585da146105e45780636359036b1461062557806370743768146106515761023d565b806330ca0a531461043a57806332ed5b1214610442578063359afa49146104f05780633c13381814610528578063488c65fc146105455761023d565b806316db51721161021057806316db5172146103895780631702ef0c146103b557806321b4b3dc146103d25780632d598e58146103da5780632daedd52146103fd5761023d565b8063025068041461024257806307b4e1e3146102cd5780630d4834421461033c578063119ce91b14610344575b600080fd5b61025f6004803603602081101561025857600080fd5b5035610937565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e08801526101008701526101208601526101408501526101608401526001600160a01b031661018083015251908190036101a00190f35b61032a60048036036101808110156102e457600080fd5b81019080806101600190600b806020026040519081016040528092919082600b602002808284376000920191909152509194505050356001600160a01b031690506109a7565b60408051918252519081900360200190f35b61032a610ab8565b6103706004803603604081101561035a57600080fd5b50803590602001356001600160a01b0316610abd565b6040805192835260208301919091528051918290030190f35b6103706004803603604081101561039f57600080fd5b50803590602001356001600160a01b0316610b20565b61032a600480360360208110156103cb57600080fd5b5035610b51565b61032a610b63565b61032a600480360360408110156103f057600080fd5b5080359060200135610b69565b6104266004803603606081101561041357600080fd5b5080359060208101359060400135610bb6565b604080519115158252519081900360200190f35b61032a610bcc565b61045f6004803603602081101561045857600080fd5b5035610c78565b604080518e81526001600160a01b038e1660208201529081018c600681111561048457fe5b60ff168152602081019b909b52506001600160a01b039098166040808b019190915260608a0197909752608089019590955260a088019390935260c087019190915260e08601526101008501526101208401529015156101408301525190819003610160019350915050f35b6104266004803603608081101561050657600080fd5b50803590602081013590604081013590606001356001600160a01b0316610ce6565b61032a6004803603602081101561053e57600080fd5b5035610e0b565b610426600480360360c081101561055b57600080fd5b8135916020810135916040820135916060810135916080820135919081019060c0810160a082013564010000000081111561059557600080fd5b8201836020820111156105a757600080fd5b803590602001918460018302840111640100000000831117156105c957600080fd5b509092509050610e20565b6103706110bc565b6104266110c4565b610601600480360360208110156105fa57600080fd5b50356110ca565b6040518082600681111561061157fe5b60ff16815260200191505060405180910390f35b6103706004803603604081101561063b57600080fd5b50803590602001356001600160a01b03166110ea565b61032a6004803603604081101561066757600080fd5b5080359060200135611365565b61067c611386565b604080516001600160a01b039092168252519081900360200190f35b6106b5600480360360208110156106ae57600080fd5b5035611395565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610426600480360360208110156106f157600080fd5b50356113d8565b61032a6004803603608081101561070e57600080fd5b508035906020810135906001600160a01b0360408201358116916060013516611515565b61032a600480360361018081101561074957600080fd5b506001600160a01b03610160820135166118f9565b61077b6004803603602081101561077457600080fd5b5035611ce6565b005b61032a6004803603602081101561079357600080fd5b5035611cfd565b61032a600480360360208110156107b057600080fd5b50356001600160a01b0316611d03565b61032a611d15565b61032a600480360360408110156107de57600080fd5b5080359060200135611d1a565b61067c6004803603602081101561080157600080fd5b5035611d3b565b61032a6004803603602081101561081e57600080fd5b5035611d56565b61032a6004803603602081101561083b57600080fd5b5035611d68565b6104266004803603602081101561085857600080fd5b5035611fe3565b61087c6004803603602081101561087557600080fd5b5035611fee565b6040518082606080838360005b838110156108a1578181015183820152602001610889565b5050505090500191505060405180910390f35b61087c600480360360408110156108ca57600080fd5b50803590602001356001600160a01b031661203d565b61032a600480360360208110156108f657600080fd5b50356127f7565b6104266004803603602081101561091357600080fd5b5035612802565b61032a6004803603602081101561093057600080fd5b5035612827565b600060208190529081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989997989697959694959394929391929091906001600160a01b03168d565b60008281602002015183600160200201518460026020020151856003602002015186600460200201518760056020020151886006602002015189600760200201518a600860200201518b600960200201518c600a6020020151604051602001808c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001208260405160200180838152602001826001600160a01b03166001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012090505b92915050565b600281565b600080610ac8613de3565b50505060009182526001602081815260408085206001600160a01b039490941685526011909301815292829020825160608101845281548082529282015494810185905260029091015460ff16151592019190915291565b60009182526001602081815260408085206001600160a01b0394909416855260139093019052912080549101549091565b60009081526001602052604090205490565b60055481565b6000818152600260209081526040808320548584529183905282206005810154821115610b9857806005015491505b6004810154610bad908363ffffffff61283916565b95945050505050565b6000610bc484848433612883565b949350505050565b604080517f616464726573732047656e6573697350726f746f636f6c41646472657373000060208083019190915271189e5d195ccccc88141c9bdc1bdcd85b125960721b603e8301526b75696e7432353620566f746560a01b60508301527475696e7432353620416d6f756e74546f5374616b6560581b605c8301526c75696e74323536204e6f6e636560981b60718301528251605e818403018152607e909201909252805191012081565b600160208190526000918252604090912080549181015460028201546003830154600484015460058501546006860154600787015460088801546009890154600a8a0154600e909a01546001600160a01b03808b169b60ff600160a01b909c048c169b99909116989091168d565b600084610cf281612c74565b610cfb57600080fd5b6000868152600160205260409020610d11613e06565b5060058082015460009081526020818152604080832081516101a0810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301529283015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c909201546001600160a01b0316610180830181905215610def578161018001516001600160a01b0316336001600160a01b031614610de857600080fd5b5084610df2565b50335b610dfe89828a8a612ce7565b9998505050505050505050565b60009081526001602052604090206002015490565b6000808460021415610f435750604080517f616464726573732047656e6573697350726f746f636f6c41646472657373000060208083019190915271189e5d195ccccc88141c9bdc1bdcd85b125960721b603e8301526b75696e7432353620566f746560a01b60508301527475696e7432353620416d6f756e74546f5374616b6560581b605c8301526c75696e74323536204e6f6e636560981b60718301528251605e818403018152607e830184528051908201203060601b609e84015260b283018c905260d283018b905260f283018a90526101128084018a9052845180850390910181526101328401855280519083012061015284019190915261017280840191909152835180840390910181526101929092019092528051910120610f94565b604080513060601b602080830191909152603482018c9052605482018b9052607482018a905260948083018a90528351808403909101815260b49092019092528051910120610f91906132c9565b90505b6000610fde85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505063ffffffff61331a169050565b90506001600160a01b03811661103b576040805162461bcd60e51b815260206004820152601a60248201527f7374616b657220616464726573732063616e6e6f742062652030000000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260076020526040902054871461105f57600080fd5b6001600160a01b03811660009081526007602052604090205461108990600163ffffffff6133eb16565b6001600160a01b0382166000908152600760205260409020556110ae8a8a8a84612883565b9a9950505050505050505050565b600160029091565b60005b90565b60009081526001602081905260409091200154600160a01b900460ff1690565b6000828152600160205260408120819060026001820154600160a01b900460ff16600681111561111657fe5b1461112057600080fd5b60028082015460009081526012830160209081526040808320546001600160a01b0389168452601386019092529091209182015490919015801590611169575060028301548154145b8015611179575060018360020154145b801561118457508115155b156111a0578183600701548260020154028161119c57fe5b0493505b83158015906112355750600183015460065460408051636b8eb40360e01b81526001600160a01b039283166004820152602481018b9052905187939290921691636b8eb40391604480820192602092909190829003018186803b15801561120657600080fd5b505afa15801561121a573d6000803e3d6000fd5b505050506040513d602081101561123057600080fd5b505110155b1561135b57600060028201556006830154611256908563ffffffff6133fd16565b60068085019190915560018401549054604080516317d4ebe560e31b81526001600160a01b039283166004820152898316602482015260448101889052606481018b90529051919092169163bea75f289160848083019260209291908290030181600087803b1580156112c857600080fd5b505af11580156112dc573d6000803e3d6000fd5b505050506040513d60208110156112f257600080fd5b50516112fd57600080fd5b8254600090815260036020908152604091829020548251878152925196975087966001600160a01b03808b16949216928b927fb4a37163ec93e05e09b62e52f7f2ea8cfde431802edede7dfebe53d2ad969dbb929081900390910190a45b5050509250929050565b60009182526001602090815260408084209284526012909201905290205490565b6006546001600160a01b031681565b6000908152600160208181526040808420838552601081018352818520546002808752838720549587526012909201909352818520549085529320549093919291565b60006113e2613e77565b60008381526001602081815260409283902083516101c08101855281548152928101546001600160a01b038116928401929092529192830190600160a01b900460ff16600681111561143057fe5b600681111561143b57fe5b8152600282015460208201526003808301546001600160a01b0316604080840191909152600484015460608085019190915260058501546080850152600685015460a0850152600785015460c0850152600885015460e08501526009850154610100850152600a8501546101208501528151908101918290526101409093019291600b85019182845b8154815260200190600101908083116114c4575050509183525050600e919091015460ff16151560209091015260c0810151815191925061150491610b69565b61150d84613412565b119392505050565b6000838152602081905260408120600b0154421161156b576040805162461bcd60e51b815260206004820152600e60248201526d1b9bdd081858dd1a5d99481e595d60921b604482015290519081900360640190fd5b6000848152602081905260409020546032111561158757600080fd5b600554604080513060601b60208083019190915260348083018590528351808403909101815260549092019092528051910120906115cc90600163ffffffff6133eb16565b6005556115d7613e77565b33602082810182905260408051606093841b818401526bffffffffffffffffffffffff1988851b16603482015281516028818303018152604890910182528051908301208452600381850181905261018085015142905260008a815280845282812060029081015460a08801526001600160a01b038b811660808901529587015260c086018b9052855181529252902054166116ca576001600160a01b0384166116a0578051600090815260036020526040902080546001600160a01b031916331790556116ca565b8051600090815260036020526040902080546001600160a01b0319166001600160a01b0386161790555b8051600090815260046020908152604080832054898452918390528220600a015461170d916064916117019163ffffffff61345316565b9063ffffffff61347a16565b6000888152602081905260409020600901549091508110156117455760008781526020819052604090206009015460e083015261174d565b60e082018190525b60e0820151610120830152600083815260016020818152604092839020855181559085015191810180546001600160a01b0319166001600160a01b03909316929092178083559285015185939192909160ff60a01b1916600160a01b8360068111156117b557fe5b0217905550606082015160028201556080820151600380830180546001600160a01b0319166001600160a01b039093169290921790915560a0830151600483015560c0830151600583015560e08301516006830155610100830151600783015561012083015160088301556101408301516009830155610160830151600a83015561018083015161184b91600b84019190613ef8565b506101a09190910151600e909101805460ff191691151591909117905560e08201516000848152600160209081526040808320600280855260129091018352818420949094558551835260038252918290205482519384526001600160a01b038a8116928501929092528383018b9052915191169185917f75b4ff136cc5de5957574c797de3334eb1c141271922b825eb071e0487ba2c5c916060908290030190a350909695505050505050565b6000606483351180159061190f57506032833510155b61194a5760405162461bcd60e51b8152600401808060200182810382526029815260200180613fcd6029913960400191505060405180910390fd5b613e8060808401351180159061196557506103e86080840135115b6119b6576040805162461bcd60e51b815260206004820152601e60248201527f31303030203c207468726573686f6c64436f6e7374203c3d2031363030300000604482015290519081900360640190fd5b606460e08401351115611a10576040805162461bcd60e51b815260206004820181905260248201527f766f7465727352657075746174696f6e4c6f7373526174696f203c3d20313030604482015290519081900360640190fd5b60a083013560408401351015611a575760405162461bcd60e51b815260040180806020018281038252602b815260200180613fa2602b913960400191505060405180910390fd5b610100830135611aae576040805162461bcd60e51b815260206004820152601e60248201527f6d696e696d756d44616f426f756e74792073686f756c64206265203e20300000604482015290519081900360640190fd5b610120830135611b05576040805162461bcd60e51b815260206004820152601c60248201527f64616f426f756e7479436f6e73742073686f756c64206265203e203000000000604482015290519081900360640190fd5b6000611b3b84600b806020026040519081016040528092919082600b602002808284376000920191909152508691506109a79050565b905060ac60026107d05b613e80811015611b8d57608087013581108015611b69575060028102608088013511155b15611b7f57818381611b7757fe5b049250611b8d565b600190910190600202611b45565b50604080516101a0810182528735815260208089013590820152878201359181019190915260608088013590820152608080820190611bda908901356001600160d81b03166103e861349c565b81526020810184905260a088810135604083015260c0808a0135606084015260e0808b013560808501526101008b0135928401929092526101208a0135908301520187600a6020908102919091013582526001600160a01b03978816918101919091526000858152808252604090819020835181559183015160018301558201516002820155606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a820155610160820151600b82015561018090910151600c90910180546001600160a01b0319169190961617909455509392505050565b80611cf081612c74565b611cf957600080fd5b5050565b50600290565b60076020526000908152604090205481565b600181565b6000918252600160209081526040808420928452600f909201905290205490565b6003602052600090815260409020546001600160a01b031681565b60046020526000908152604090205481565b600081815260016020526040812060056001820154600160a01b900460ff166006811115611d9257fe5b1480611db7575060066001820154600160a01b900460ff166006811115611db557fe5b145b611df25760405162461bcd60e51b8152600401808060200182810382526033815260200180613ff66033913960400191505060405180910390fd5b611dfb836134bf565b611e4c576040805162461bcd60e51b815260206004820152601760248201527f70726f706f73616c206e65656420746f20657870697265000000000000000000604482015290519081900360640190fd5b6000611e90611e82600f611701611e75600b87016001015460048801549063ffffffff6133eb16565b429063ffffffff6133fd16565b60019063ffffffff6133eb16565b90506064811115611e9f575060645b600a820181905560016000908152601283016020526040902054611ed19060649061170190849063ffffffff61345316565b6006546040805163a9059cbb60e01b81523360048201526024810184905290519295506001600160a01b039091169163a9059cbb916044808201926020929091908290030181600087803b158015611f2857600080fd5b505af1158015611f3c573d6000803e3d6000fd5b505050506040513d6020811015611f5257600080fd5b5051611fa5576040805162461bcd60e51b815260206004820152601d60248201527f7472616e7366657220746f206d73672e73656e646572206661696c6564000000604482015290519081900360640190fd5b604080518481529051339186917f7468017f6ff596af88244327e88fe691ac48cc1db88b033d11c335f2c7ccdd039181900360200190a35050919050565b6000610ab282612c74565b611ff6613f36565b60008281526001602052604090819020815160608101909252600b0160038282826020028201915b81548152602001906001019080831161201e5750505050509050919050565b612045613f36565b600083815260016020526040902060026001820154600160a01b900460ff16600681111561206f57fe5b14806120935750600180820154600160a01b900460ff16600681111561209157fe5b145b6120ce5760405162461bcd60e51b815260040180806020018281038252602d815260200180613f75602d913960400191505060405180910390fd5b6120d6613e06565b5060058082015460009081526020818152604080832081516101a08101835281548152600180830154948201949094526002808301549382019390935260038201546060820152600482015460808201529481015460a0860152600681015460c0860152600781015460e086015260088101546101008601526009810154610120860152600a810154610140860152600b810154610160860152600c01546001600160a01b031661018085015284015414156121a55750600260009081526010830160205260409020546121ba565b50600160009081526010830160205260409020545b60646121d48361010001518361345390919063ffffffff16565b816121db57fe5b6001600160a01b038716600090815260138601602090815260408083206001845260128901909252808320546002845290832054949093049450929091612228919063ffffffff6133eb16565b600286015460009081526012870160205260409020546001840154919250901561234d5760016000908152601287016020526040812054600a88015461228c9161227f91606491611701919063ffffffff61345316565b849063ffffffff6133fd16565b9050600180880154600160a01b900460ff1660068111156122a957fe5b14156122bb5760018401548852612344565b6002870154845414156123445783546001141561232257808760070154101561231d5760006122f78860070154836133fd90919063ffffffff16565b90508261231182876001015461345390919063ffffffff16565b8161231857fe5b048952505b612344565b60018401548290612339908363ffffffff61345316565b8161234057fe5b0488525b50600060018401555b600e86015460ff1615801561237d575085546000908152600360205260409020546001600160a01b038981169116145b80156123a25750600180870154600160a01b900460ff16600681111561239f57fe5b14155b80156123b2575060028660020154145b1561240f5760078601546123fd906123f1836123d4838763ffffffff61345316565b816123db57fe5b048a60005b60200201519063ffffffff6133eb16565b9063ffffffff6133fd16565b8752600e8601805460ff191660011790555b6001600160a01b038816600090815260118701602052604090206001810154158015906124405750600281015460ff165b1561251b57600180880154600160a01b900460ff16600681111561246057fe5b1415612496576064612484876101000151836001015461345390919063ffffffff16565b8161248b57fe5b046020890152612513565b8054600288015414156125135760028701546000908152601088016020526040902054600182015461250d91906124d3908863ffffffff61345316565b816124da57fe5b0460646124f9896101000151856001015461345390919063ffffffff16565b8161250057fe5b049063ffffffff6133eb16565b60208901525b600060018201555b60038701546001600160a01b038a8116911614801561253e575060018760020154145b8015612556575060038701546001600160a01b031615155b156125785760e086015160408901526003870180546001600160a01b03191690555b8751156126c5578751600888015461258f916133fd565b600888015560065488516040805163a9059cbb60e01b81526001600160a01b038d8116600483015260248201939093529051919092169163a9059cbb9160448083019260209291908290030181600087803b1580156125ed57600080fd5b505af1158015612601573d6000803e3d6000fd5b505050506040513d602081101561261757600080fd5b505161266a576040805162461bcd60e51b815260206004820152601e60248201527f7472616e7366657220746f2062656e6566696369617279206661696c65640000604482015290519081900360640190fd5b8654600090815260036020908152604091829020548a51835190815292516001600160a01b038d8116949216928e927f6d26871c9f457d104b2122485f659f126f7a0cf6938cf20482c03f49794a2fbf929081900390910190a45b60408801516126d6908960016123e0565b156127ea5760018701546001600160a01b031663d29b5d2f6127018a600260200201518b60016123e0565b8b8d6040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561275957600080fd5b505af115801561276d573d6000803e3d6000fd5b505050506040513d602081101561278357600080fd5b505086546000908152600360205260409020546001600160a01b03808b1691168b7f7419b736daacf66d5c1645948c956fca2b83be1e2e02d486d65713f289d683b86127d88c600260200201518d60016123e0565b60408051918252519081900360200190a45b5050505050505092915050565b6000610ab282613412565b60008161280e81612c74565b61281757600080fd5b612820836134bf565b9392505050565b60026020526000908152604090205481565b60008282650100000000005b8115610bad578160011660011415612864576128618184613d4e565b90505b60019190911c90811561287e5761287b8384613d4e565b92505b612845565b6000600284111580156128965750600084115b6128da576040805162461bcd60e51b815260206004820152601060248201526f77726f6e6720766f74652076616c756560801b604482015290519081900360640190fd5b6000831161292f576040805162461bcd60e51b815260206004820152601b60248201527f7374616b696e6720616d6f756e742073686f756c64206265203e300000000000604482015290519081900360640190fd5b612938856134bf565b1561294557506001610bc4565b600085815260016020526040902060046001820154600160a01b900460ff16600681111561296f57fe5b14158015612997575060036001820154600160a01b900460ff16600681111561299457fe5b14155b156129a6576000915050610bc4565b6001600160a01b038316600090815260138201602052604090206001810154158015906129d4575080548614155b156129e457600092505050610bc4565b600654604080516323b872dd60e01b81526001600160a01b038781166004830152306024830152604482018990529151889392909216916323b872dd916064808201926020929091908290030181600087803b158015612a4357600080fd5b505af1158015612a57573d6000803e3d6000fd5b505050506040513d6020811015612a6d57600080fd5b5051612ac0576040805162461bcd60e51b815260206004820152601960248201527f6661696c207472616e736665722066726f6d207374616b657200000000000000604482015290519081900360640190fd5b6008830154612ad5908263ffffffff6133eb16565b60088401556001820154612aef908263ffffffff6133eb16565b60018301819055600160801b1015612b4e576040805162461bcd60e51b815260206004820152601a60248201527f7374616b696e6720616d6f756e7420697320746f6f2068696768000000000000604482015290519081900360640190fd5b600160801b83600801541115612bab576040805162461bcd60e51b815260206004820152601860248201527f746f74616c207374616b657320697320746f6f20686967680000000000000000604482015290519081900360640190fd5b6001871415612bcf576002820154612bc9908263ffffffff6133eb16565b60028301555b8682556000878152601284016020526040902054612bf490829063ffffffff6133eb16565b60008881526012850160209081526040808320939093558554825260038152908290205482518a815291820189905282516001600160a01b03808a16949216928c927fd0239d7d4acf51def4507fa173be466927de5d75d8b10d840cd6994d6e10231092918290030190a4612c68886134bf565b98975050505050505050565b600081815260016020819052604082200154600160a01b900460ff166004816006811115612c9e57fe5b1480612cb557506005816006811115612cb357fe5b145b80612ccb57506006816006811115612cc957fe5b145b8061282057506003816006811115612cdf57fe5b149392505050565b600060028311158015612cfa5750600083115b612d3c576040805162461bcd60e51b815260206004820152600e60248201526d18101e102fbb37ba32901e1e901960911b604482015290519081900360640190fd5b612d45856134bf565b15612d5257506001610bc4565b612d5a613e06565b506000858152600160208181526040808420600580820154865285845282862083516101a0810185528154815281870154818701526002820154818601526003820154606082015260048083015460808301529282015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c909101546001600160a01b039081166101808301528c8852868652958301548451634ac41bc760e11b81528c881693810193909352602483018d905293519096929592949390921692639588378e92604480840193829003018186803b158015612e6157600080fd5b505afa158015612e75573d6000803e3d6000fd5b505050506040513d6020811015612e8b57600080fd5b5051905080612ee1576040805162461bcd60e51b815260206004820152601b60248201527f5f766f746572206d75737420686176652072657075746174696f6e0000000000604482015290519081900360640190fd5b84811015612f2b576040805162461bcd60e51b8152602060048201526012602482015271072657075746174696f6e203e3d205f7265760741b604482015290519081900360640190fd5b8480612f345750805b6001600160a01b038816600090815260118401602052604090206001015415612f64576000945050505050610bc4565b6000878152600f84016020526040902054612f8690829063ffffffff6133eb16565b6000888152600f8501602052604080822083905560028601548252812054908990521080612fde57506002808401546000908152600f8501602052604080822054928252902054148015612fde575060018360020154145b156130985760056001840154600160a01b900460ff166006811115612fff57fe5b14801561301f575060c0840151604085015103600b840160010154420310155b80613043575060066001840154600160a01b900460ff16600681111561304157fe5b145b156130905760066001840154600160a01b900460ff16600681111561306457fe5b146130895760c0840151600484015560018301805460ff60a01b1916600360a11b1790555b42600c8401555b600283018790555b604080516060810182528881526020810183905290810160046001860154600160a01b900460ff1660068111156130cb57fe5b14806130f0575060036001860154600160a01b900460ff1660068111156130ee57fe5b145b151590526001600160a01b0389166000908152601185016020908152604091829020835181559083015160018201559101516002909101805460ff191691151591909117905560046001840154600160a01b900460ff16600681111561315257fe5b1480613177575060036001840154600160a01b900460ff16600681111561317557fe5b145b1561326457600087815260108401602052604090205461319e90829063ffffffff6133eb16565b60008881526010850160205260408120919091556101008501516064906131cb908463ffffffff61345316565b816131d257fe5b600186015460408051637c0fc5fb60e11b815293909204600484018190526001600160a01b038d81166024860152604485018f9052925190945091169163f81f8bf69160648083019260209291908290030181600087803b15801561323657600080fd5b505af115801561324a573d6000803e3d6000fd5b505050506040513d602081101561326057600080fd5b5050505b82546000908152600360209081526040918290205482518a815291820184905282516001600160a01b03808d16949216928d927f066c061a3792cb3eb64a441a928655fcbafb4a54b49725fe9cd2951df5e7189e92918290030190a4610dfe896134bf565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008060008084516041146133355760009350505050610ab2565b50505060208201516040830151606084015160001a601b81101561335757601b015b8060ff16601b1415801561336f57508060ff16601c14155b156133805760009350505050610ab2565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa1580156133d7573d6000803e3d6000fd5b505050602060405103519350505050610ab2565b60008282018381101561282057600080fd5b60008282111561340c57600080fd5b50900390565b60008181526001602081815260408084206002855260128101909252808420549284528320549091612820916001600160d81b03169063ffffffff61349c16565b60008261346257506000610ab2565b8282028284828161346f57fe5b041461282057600080fd5b600080821161348857600080fd5b600082848161349357fe5b04949350505050565b60006128206001600160d81b038085166501000000000090810291851602613db2565b6000816134cb81612c74565b6134d457600080fd5b60008381526001602052604090206134ea613e06565b506005808201546000908152602081815260409182902082516101a0810184528154815260018201549281019290925260028101549282019290925260038201546060820152600482015460808201529181015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009810154610120830152600a810154610140830152600b810154610160830152600c01546001600160a01b031661018082015261359e613e77565b604080516101c0810182528454815260018501546001600160a01b03811660208301529091859190830190600160a01b900460ff1660068111156135de57fe5b60068111156135e957fe5b8152600282015460208201526003808301546001600160a01b0316604080840191909152600484015460608085019190915260058501546080850152600685015460a0850152600785015460c0850152600885015460e08501526009850154610100850152600a8501546101208501528151908101918290526101409093019291600b85019182845b815481526020019060010190808311613672575050509183525050600e919091015460ff16151560209182015260018501546040805163b551c37360e01b8152600481018b905290519394506000936001600160a01b039092169263b551c37392602480840193829003018186803b1580156136ed57600080fd5b505afa158015613701573d6000803e3d6000fd5b505050506040513d602081101561371757600080fd5b5051835160028601546000908152600f870160205260408120549293506064840490910291819081908410156137c45760036001890154600160a01b900460ff16600681111561376357fe5b141561377257600192506137a2565b60046001890154600160a01b900460ff16600681111561378e57fe5b141561379d57600392506137a2565b600592505b6001880180546002919060ff60a01b1916600160a01b835b0217905550613a0b565b60036001890154600160a01b900460ff1660068111156137e057fe5b1415613862576020870151600b89015442031061381b5760018801805460ff60a01b1916600160a01b17905560028089018190559250613862565b61382d88600501548960000154610b69565b9050806138398c613412565b11156138625760018801805460ff60a01b1916600160a21b17905542600d890155600988018190555b60046001890154600160a01b900460ff16600681111561387e57fe5b1415613a0b5761389688600501548960000154610b69565b6060880151909150600b89016002015442031061397c57806138b78c613412565b111561395b5787546000908152600260205260409020546110001115613956576001888101805460ff60a01b1916600560a01b17905542600c8a01558854600090815260026020818152604080842080549095019094558b54835260048152838320548282528484205492845260128d019091529290912054919350908390038161393e57fe5b89546000908152600460205260409020919005830190555b613977565b6001880180546003919060ff60a01b1916600160a01b836137ba565b613a0b565b60006139878c613412565b60098a015490915061399f908363ffffffff613dcd16565b81116139bf5760018901805460ff60a01b1916600360a01b179055613a09565b8089600901541115613a0957600989018290556040805183815290518d917fad767d61af51c7895fa3cc0497dde01afb610c74e55ee4d8a71fa5e3ee136d54919081900360200190a25b505b60056001890154600160a01b900460ff166006811115613a2757fe5b1480613a4c575060066001890154600160a01b900460ff166006811115613a4a57fe5b145b15613a7c576004880154600c890154420310613a7c5760018801805460ff60a01b1916600160a11b179055600492505b6000836005811115613a8a57fe5b14613ca8576004836005811115613a9d57fe5b1480613ab457506005836005811115613ab257fe5b145b15613b6f578551600090815260026020526040902054613adb90600163ffffffff6133fd16565b86516000908152600260205260408082209290925587518152205480613b11578854600090815260046020526040812055613b6d565b88546000908152600460209081526040808320546002845260128d01909252909120549093508190613b50906123f1866001850163ffffffff61345316565b81613b5757fe5b8a54600090815260046020526040902091900490555b505b87546000908152600360209081526040918290205460028b0154835190815291820188905282516001600160a01b03909116928e927f37471b9c9d295ffb1309ad070b8964700bfb7b555e8e8292d0b6cbc7dba35d10929081900390910190a38a7f46a713b994c752c68fbefa9048bec9a0010cc7d933ad95a3c3dbb25931a167e78460405180826005811115613c0257fe5b60ff16815260200191505060405180910390a26001880154600289015460408051639d4c162d60e01b8152600481018f90526024810192909252516001600160a01b0390921691639d4c162d916044808201926020929091908290030181600087803b158015613c7157600080fd5b505af1158015613c85573d6000803e3d6000fd5b505050506040513d6020811015613c9b57600080fd5b5050600688015460078901555b6001880154600160a01b900460ff166006811115613cc257fe5b86604001516006811115613cd257fe5b14613d2f578a7f21aca7f0285ccddeca2935074d3e36b5ab8fea0327f84cbbf12cf1b6d1a749f98960010160149054906101000a900460ff1660405180826006811115613d1b57fe5b60ff16815260200191505060405180910390a25b6000836005811115613d3d57fe5b14159b9a5050505050505050505050565b600082820282848281613d5d57fe5b0414613da8576040805162461bcd60e51b81526020600482015260156024820152745265616c4d617468206d756c206f766572666c6f7760581b604482015290519081900360640190fd5b60281c9392505050565b60008165010000000000840281613dc557fe5b049392505050565b6000818310613ddc5781612820565b5090919050565b604051806060016040528060008152602001600081526020016000151581525090565b604051806101a0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b604080516101c081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b0316815260200160008152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001613eeb613f36565b8152600060209091015290565b8260038101928215613f26579160200282015b82811115613f26578251825591602001919060010190613f0b565b50613f32929150613f54565b5090565b60405180606001604052806003906020820280388339509192915050565b6110c791905b80821115613f325760008155600101613f5a565b3b15159056fe50726f706f73616c2073686f756c64206265204578656375746564206f722045787069726564496e5175657565626f6f73746564566f7465506572696f644c696d6974203e3d207175696574456e64696e67506572696f643530203c3d20717565756564566f7465526571756972656450657263656e74616765203c3d2031303070726f706f73616c20737461746520696e206e6f7420426f6f73746564206e6f72205175696574456e64696e67506572696f64a265627a7a723158200dae3035bae67808c8a891e3143b4e582b23249221f9dc36ce15010d8672901d64736f6c63430005100032",
  "sourceMap": "220:9987:65:-;;;774:141;8:9:-1;5:2;;;30:1;27;20:12;5:2;774:141:65;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;774:141:65;;6803:39:66;6229:42;6803:37;774:141:65;6803:37:66;;;;;:39;;:::i;:::-;6799:169;;;6858:12;:40;;-1:-1:-1;;;;;;6858:40:66;6229:42;6858:40;;;6799:169;;;6929:12;:28;;-1:-1:-1;;;;;;6929:28:66;-1:-1:-1;;;;;6929:28:66;;;;;6799:169;6377:597;774:141:65;220:9987;;463:616:84;1026:20;1064:8;;;463:616::o;220:9987:65:-;;;;;;;",
  "deployedSourceMap": "220:9987:65:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;220:9987:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5452:46:66;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5452:46:66;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5452:46:66;;;;;;;;;;;;;;21620:774;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;21620:774:66;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;21620:774:66;;-1:-1:-1;;;21620:774:66;-1:-1:-1;;;;;21620:774:66;;-1:-1:-1;21620:774:66;:::i;:::-;;;;;;;;;;;;;;;;6017:30;;;:::i;6066:211:65:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6066:211:65;;;;;;-1:-1:-1;;;;;6066:211:65;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8224:215;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8224:215:65;;;;;;-1:-1:-1;;;;;8224:215:65;;:::i;7819:148::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7819:148:65;;:::i;6090:27:66:-;;;:::i;21154:384::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21154:384:66;;;;;;;:::i;1187:162:65:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1187:162:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;441:220;;;:::i;5544:43:66:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5544:43:66;;:::i;:::-;;;;;;;-1:-1:-1;;;;;5544:43:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5544:43:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5544:43:66;-1:-1:-1;;5544:43:66;3842:554:65;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;3842:554:65;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3842:554:65;;:::i;8970:131::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8970:131:65;;:::i;1959:1510::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1959:1510:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;1959:1510:65;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1959:1510:65;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;1959:1510:65;;-1:-1:-1;1959:1510:65;-1:-1:-1;1959:1510:65;:::i;9825:117::-;;;:::i;9530:83::-;;;:::i;9278:125::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9278:125:65;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18916:1396:66;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18916:1396:66;;;;;;-1:-1:-1;;;;;18916:1396:66;;:::i;8658:146:65:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8658:146:65;;;;;;;:::i;6152:26:66:-;;;:::i;:::-;;;;-1:-1:-1;;;;;6152:26:66;;;;;;;;;;;;;;7263:361:65;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7263:361:65;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20498:230:66;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20498:230:66;;:::i;7565:2143::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;7565:2143:66;;;;;;;;-1:-1:-1;;;;;7565:2143:66;;;;;;;;;;;;:::i;11999:1829::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;11999:1829:66;;;;;;:::i;4612:123:65:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4612:123:65;;:::i;:::-;;5285:106;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5285:106:65;;:::i;668:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;668:44:65;-1:-1:-1;;;;;668:44:65;;:::i;6053:31:66:-;;;:::i;6532:150:65:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6532:150:65;;;;;;;:::i;5758:60:66:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5758:60:66;;:::i;5877:86::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5877:86:66;;:::i;9967:1087::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9967:1087:66;;:::i;6838:115:65:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6838:115:65;;:::i;5563:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5563:143:65;;:::i;:::-;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5563:143:65;;;;;;;;;;;;;;;;14387:4032:66;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14387:4032:66;;;;;;-1:-1:-1;;;;;14387:4032:66;;:::i;10096:109:65:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10096:109:65;;:::i;4999:127::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4999:127:65;;:::i;5656:52:66:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5656:52:66;;:::i;5452:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5452:46:66;;:::o;21620:774::-;21806:7;22043;21806;22043:10;;;;22071:7;22079:1;22071:10;;;;22099:7;22107:1;22099:10;;;;22127:7;22135:1;22127:10;;;;22155:7;22163:1;22155:10;;;;22183:7;22191:1;22183:10;;;;22211:7;22219:1;22211:10;;;;22239:7;22247:1;22239:10;;;;22267:7;22275:1;22267:10;;;;22295:7;22303:1;22295:10;;;;22323:7;22331:2;22323:11;;;;22009:326;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22009:326:66;;;21986:363;;;;;;22363:13;21956:430;;;;;;;;;;;-1:-1:-1;;;;;21956:430:66;-1:-1:-1;;;;;21956:430:66;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21956:430:66;;;21933:454;;;;;;21926:461;;21620:774;;;;;:::o;6017:30::-;6046:1;6017:30;:::o;6066:211:65:-;6143:4;6149;6165:18;;:::i;:::-;-1:-1:-1;;;6186:22:65;;;;:9;:22;;;;;;;;-1:-1:-1;;;;;6186:37:65;;;;;;:29;;;;:37;;;;;;6165:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6066:211::o;8224:215::-;8303:7;8339:22;;;:9;:22;;;;;;;;-1:-1:-1;;;;;8339:39:65;;;;;;:30;;;;:39;;;;:44;;8385:46;;;8339:44;;8224:215::o;7819:148::-;7895:7;7922:22;;;:9;:22;;;;;:37;;7819:148::o;6090:27:66:-;;;;:::o;21154:384::-;21239:7;21274:39;;;:22;:39;;;;;;;;;21351:23;;;;;;;;;21397:25;;;;21389:33;;21385:97;;;21446:6;:25;;;21438:33;;21385:97;21499:21;;;;:32;;21525:5;21499:32;:25;:32;:::i;:::-;21492:39;21154:384;-1:-1:-1;;;;;21154:384:66:o;1187:162:65:-;1272:4;1295:47;1302:11;1315:5;1322:7;1331:10;1295:6;:47::i;:::-;1288:54;1187:162;-1:-1:-1;;;;1187:162:65:o;441:220::-;504:156;;;;;;;;;;;;-1:-1:-1;;;504:156:65;;;;-1:-1:-1;;;504:156:65;;;;-1:-1:-1;;;504:156:65;;;;-1:-1:-1;;;504:156:65;;;;;;22:32:-1;26:21;;;22:32;6:49;;504:156:65;;;;;;;494:167;;;;;441:220;:::o;5544:43:66:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5544:43:66;;;;;-1:-1:-1;;;5544:43:66;;;;;;;;;;;;;;;:::o;3842:554:65:-;3975:4;3950:11;7214:23:66;7225:11;7214:10;:23::i;:::-;7206:32;;;;;;3991:25:65;4019:22;;;:9;:22;;;;;4051:24;;:::i;:::-;-1:-1:-1;4089:19:65;;;;;4078:10;:31;;;;;;;;;;;4051:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4051:58:65;;;;;;;4146:33;4142:183;;4217:6;:19;;;-1:-1:-1;;;;;4203:33:65;:10;-1:-1:-1;;;;;4203:33:65;;4195:42;;;;;;-1:-1:-1;4259:6:65;4142:183;;;-1:-1:-1;4304:10:65;4142:183;4341:48;4354:11;4367:5;4374;4381:7;4341:12;:48::i;:::-;4334:55;3842:554;-1:-1:-1;;;;;;;;;3842:554:65:o;8970:131::-;9034:7;9060:22;;;:9;:22;;;;;:34;;;;8970:131::o;1959:1510::-;2198:4;2269:24;2307:14;2325:1;2307:19;2303:757;;;-1:-1:-1;504:156:65;;;;;;;;;;;;-1:-1:-1;;;504:156:65;;;;-1:-1:-1;;;504:156:65;;;;-1:-1:-1;;;504:156:65;;;;-1:-1:-1;;;504:156:65;;;;;;22:32:-1;26:21;;;22:32;6:49;;504:156:65;;;;;494:167;;;;;;2535:4;2485:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2485:189:65;;;;;2450:246;;;;;;2388:326;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2388:326:65;;;;;;;2361:367;;;;;2303:757;;;2813:189;;;2863:4;2813:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2813:189:65;;;;;;;2778:246;;;;;:271;;:269;:271::i;:::-;2759:290;;2303:757;3069:14;3086:36;3111:10;;3086:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;3086:16:65;;:36;-1:-1:-1;;3086:36:65;:24;:36;;-1:-1:-1;3086:36:65:i;:::-;3069:53;-1:-1:-1;;;;;;3245:20:65;;3237:59;;;;;-1:-1:-1;;;3237:59:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3314:19:65;;;;;;:11;:19;;;;;;:29;;3306:38;;;;;;-1:-1:-1;;;;;3376:19:65;;;;;;:11;:19;;;;;;:26;;3400:1;3376:26;:23;:26;:::i;:::-;-1:-1:-1;;;;;3354:19:65;;;;;;:11;:19;;;;;:48;3419:43;3426:11;3439:5;3446:7;3366:6;3419;:43::i;:::-;3412:50;1959:1510;-1:-1:-1;;;;;;;;;;1959:1510:65:o;9825:117::-;6083:1:66;6046;9825:117:65;;:::o;9530:83::-;9578:4;9530:83;;:::o;9278:125::-;9336:13;9368:22;;;:9;:22;;;;;;;;:28;;-1:-1:-1;;;9368:28:65;;;;;9278:125::o;18916:1396:66:-;19007:22;19094;;;:9;:22;;;;;19007;;19152;19134:14;;;;-1:-1:-1;;;19134:14:66;;;;:40;;;;;;;;;19126:49;;;;;;19230:20;;;;;19185:26;19214:37;;;:15;;;:37;;;;;;;;;-1:-1:-1;;;;;19285:30:66;;;;:16;;;:30;;;;;;19343:20;;;;19214:37;;19285:30;19343:24;;;;19342:78;;-1:-1:-1;19399:20:66;;;;19384:11;;:35;19342:78;:122;;;;;6083:1;19436:8;:20;;;:27;19342:122;:162;;;;-1:-1:-1;19480:23:66;;;19342:162;19325:318;;;19610:18;19590:8;:18;;;19567:6;:20;;;:41;19566:62;;;;;;19548:80;;19325:318;19657:20;;;;;19656:171;;-1:-1:-1;19726:18:66;;;;19781:12;;19694:113;;;-1:-1:-1;;;19694:113:66;;-1:-1:-1;;;;;19781:12:66;;;19694:113;;;;;;;;;;;;19811:15;;19726:18;;;;;19694:86;;:113;;;;;;;;;;;;;;;19726:18;19694:113;;;5:2:-1;;;;30:1;27;20:12;5:2;19694:113:66;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19694:113:66;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19694:113:66;:132;;19656:171;19652:654;;;19866:1;19843:20;;;:24;19908;;;;:45;;19937:15;19908:45;:28;:45;:::i;:::-;19881:24;;;;:72;;;;20020:18;;;;20074:12;;19988:143;;;-1:-1:-1;;;19988:143:66;;-1:-1:-1;;;;;20074:12:66;;;19988:143;;;;;;;;;;;;;;;;;;;;;;;;;20020:18;;;;;19988:85;;:143;;;;;;;;;;;;;;20020:18;;19988:143;;;5:2:-1;;;;30:1;27;20:12;5:2;19988:143:66;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19988:143:66;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19988:143:66;19967:165;;;;;;20240:23;;20226:38;;;;:13;:38;;;;;;;;;;20197:98;;;;;;;20163:15;;-1:-1:-1;20163:15:66;;-1:-1:-1;;;;;20197:98:66;;;;20226:38;;;20213:11;;20197:98;;;;;;;;;;;19652:654;18916:1396;;;;;;;;:::o;8658:146:65:-;8735:7;8761:22;;;:9;:22;;;;;;;;:36;;;:29;;;;:36;;;;;;8658:146::o;6152:26:66:-;;;-1:-1:-1;;;;;6152:26:66;;:::o;7263:361:65:-;7330:7;7401:22;;;:9;:22;;;;;;;;:43;;;:38;;;:43;;;;;;6046:1:66;7462:42:65;;;;;;;7522:34;;;:29;;;;:34;;;;;;;7574:33;;;;;;7401:43;;7462:42;;7522:34;7263:361::o;20498:230:66:-;20560:4;20576:24;;:::i;:::-;20603:22;;;;:9;:22;;;;;;;;;20576:49;;;;;;;;;;;;;;;-1:-1:-1;;;;;20576:49:66;;;;;;;;;;;;;;-1:-1:-1;;;20576:49:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20576:49:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20576:49:66;;;-1:-1:-1;;20576:49:66;;;;;;;;;;;;;;;20675:19;;;;20696:23;;20576:49;;-1:-1:-1;20665:55:66;;:9;:55::i;:::-;20643:19;20650:11;20643:6;:19::i;:::-;:77;;20498:230;-1:-1:-1;;;20498:230:66:o;7565:2143::-;7687:7;7776:23;;;;;;;;;;:38;;;7770:3;:44;7762:71;;;;;-1:-1:-1;;;7762:71:66;;;;;;;;;;;;-1:-1:-1;;;7762:71:66;;;;;;;;;;;;;;;7889:10;:23;;;;;;;;;;:52;7945:2;-1:-1:-1;7889:58:66;7881:67;;;;;;8045:12;;8022:36;;;8039:4;8022:36;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8022:36:66;;;;;;;8012:47;;;;;;8084:19;;8101:1;8084:19;:16;:19;:::i;:::-;8069:12;:34;8140:24;;:::i;:::-;8195:10;8174:18;;;;:31;;;8251:43;;;;;;;;;;;-1:-1:-1;;8251:43:66;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;8251:43:66;;;;;;8241:54;;;;;;8215:80;;8323:20;8306:14;;;:37;;;8407:14;;;;8427:3;8407:23;;-1:-1:-1;8497:23:66;;;;;;;;;:46;;;;;8456:38;;;:87;-1:-1:-1;;;;;8553:29:66;;;:17;;;:29;8592:20;;;:25;8627:19;;;:33;;;8688:23;;8674:38;;;;;;;;8670:292;;-1:-1:-1;;;;;8746:27:66;;8742:210;;8807:23;;8793:38;;;;:13;:38;;;;;:51;;-1:-1:-1;;;;;;8793:51:66;8834:10;8793:51;;;8742:210;;;8897:23;;8883:38;;;;:13;:38;;;;;:54;;-1:-1:-1;;;;;;8883:54:66;-1:-1:-1;;;;;8883:54:66;;;;;8742:210;9096:23;;8997:17;9068:52;;;:27;:52;;;;;;;;;9025:23;;;;;;;;;:38;;;:105;;9126:3;;9025:96;;;:42;:96;:::i;:::-;:100;:105;:100;:105;:::i;:::-;9156:10;:23;;;;;;;;;;:40;;;8997:133;;-1:-1:-1;9144:52:66;;9140:217;;;9239:10;:23;;;;;;;;;;:40;;;9212:24;;;:67;9140:217;;;9310:24;;;:36;;;9140:217;9389:24;;;;9366:20;;;:47;-1:-1:-1;9423:21:66;;;:9;:21;;;;;;;;;:32;;;;;;;;;;;;;-1:-1:-1;;;;;;9423:32:66;-1:-1:-1;;;;;9423:32:66;;;;;;;;;;;;;;9389:24;;9423:21;;:32;;-1:-1:-1;;;;9423:32:66;-1:-1:-1;;;9423:32:66;;;;;;;;;;;;;-1:-1:-1;9423:32:66;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9423:32:66;-1:-1:-1;;;;;9423:32:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9423:32:66;;;;;;;;;;;;-1:-1:-1;;9423:32:66;;;;;;;;;;9500:24;;;;-1:-1:-1;9465:21:66;;;-1:-1:-1;9465:21:66;;;;;;;;6046:1;9465:32;;;:28;;;;:32;;;;;:59;;;;9609:23;;9595:38;;:13;:38;;;;;;;9571:103;;;;;-1:-1:-1;;;;;9571:103:66;;;;;;;;;;;;;;;;;;9595:38;;;9465:21;;9571:103;;;;;;;;;;-1:-1:-1;9691:10:66;;7565:2143;-1:-1:-1;;;;;;7565:2143:66:o;11999:1829::-;12165:7;12210:3;12196:10;;:17;;;;:37;;-1:-1:-1;12231:2:66;12217:10;;:16;;12196:37;12188:91;;;;-1:-1:-1;;;12188:91:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12311:5;12297:10;;;;:19;;;;:40;;-1:-1:-1;12333:4:66;12320:10;;;;:17;12297:40;12289:83;;;;;-1:-1:-1;;;12289:83:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;12404:3;12390:10;;;;:17;;12382:62;;;;;-1:-1:-1;;;12382:62:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12476:10;;;;12462;;;;:24;;12454:80;;;;-1:-1:-1;;;12454:80:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12552:10;;;;12544:57;;;;;-1:-1:-1;;;12544:57:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;12619:10;;;;12611:55;;;;;-1:-1:-1;;;12611:55:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;12677:18;12698:41;12716:7;12698:41;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;12725:13:66;;-1:-1:-1;12698:17:66;;-1:-1:-1;12698:41:66:i;:::-;12677:62;-1:-1:-1;12843:3:66;12895:1;12923:4;12906:216;12933:5;12929:1;:9;12906:216;;;12968:10;;;;:14;-1:-1:-1;12967:39:66;;;;-1:-1:-1;13004:1:66;13002:3;;12988:10;;;;:17;;12967:39;12963:132;;;13056:1;13042:13;:15;;;;;;13026:31;;13075:5;;12963:132;13108:3;;;;;12946:1;12944:3;12906:216;;;-1:-1:-1;13157:637:66;;;;;;;;13212:10;;13157:637;;13212:10;13259;;;;13157:637;;;;13307:10;;;;13157:637;;;;;;;;13358:10;;;;13157:637;;;;;;;;;13397:43;;13405:10;;;-1:-1:-1;;;;;13397:28:66;13434:4;13397:28;:43::i;:::-;13157:637;;;;;;;;13519:10;;;;;13157:637;;;;13563:10;;;;;13157:637;;;;13613:10;;;;;13157:637;;;;13654:10;;;;13157:637;;;;;;;13693:10;;;;13157:637;;;;;13519:10;13740:2;13732:11;;;;;;;;;13157:637;;-1:-1:-1;;;;;13157:637:66;;;;;;;;;;-1:-1:-1;13132:22:66;;;;;;;;;;;:662;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13132:662:66;;;;;;;;;-1:-1:-1;13132:22:66;11999:1829;-1:-1:-1;;;11999:1829:66:o;4612:123:65:-;4670:11;7214:23:66;7225:11;7214:10;:23::i;:::-;7206:32;;;;;;4612:123:65;;:::o;5285:106::-;-1:-1:-1;6010:1:66;;5285:106:65:o;668:44::-;;;;;;;;;;;;;:::o;6053:31:66:-;6083:1;6053:31;:::o;6532:150:65:-;6612:7;6638:22;;;:9;:22;;;;;;;;:37;;;:28;;;;:37;;;;;;6532:150::o;5758:60:66:-;;;;;;;;;;;;-1:-1:-1;;;;;5758:60:66;;:::o;5877:86::-;;;;;;;;;;;;;:::o;9967:1087::-;10029:28;10097:22;;;:9;:22;;;;;10155:21;10137:14;;;;-1:-1:-1;;;10137:14:66;;;;:39;;;;;;;;;:92;;;-1:-1:-1;10198:31:66;10180:14;;;;-1:-1:-1;;;10180:14:66;;;;:49;;;;;;;;;10137:92;10129:164;;;;-1:-1:-1;;;10129:164:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10311:21;10320:11;10311:8;:21::i;:::-;10303:57;;;;;-1:-1:-1;;;10303:57:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;10370:38;10474:91;10486:78;10561:2;10486:70;10494:61;10537:14;;;10552:1;10537:17;;10494:38;;;;;:61;:42;:61;:::i;:::-;10486:3;;:70;:7;:70;:::i;:78::-;10479:1;;10474:91;:11;:91;:::i;:::-;10370:196;;10613:3;10580:30;:36;10576:103;;;-1:-1:-1;10665:3:66;10576:103;10688:39;;;:72;;;6083:1;10828:20;;;;:15;;;:20;;;;;;10793:65;;10854:3;;10793:56;;10730:30;;10793:56;:34;:56;:::i;:65::-;10876:12;;:55;;;-1:-1:-1;;;10876:55:66;;10898:10;10876:55;;;;;;;;;;;;10770:88;;-1:-1:-1;;;;;;10876:12:66;;;;:21;;:55;;;;;;;;;;;;;;;:12;;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;10876:55:66;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10876:55:66;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10876:55:66;10868:97;;;;;-1:-1:-1;;;10868:97:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;10980:67;;;;;;;;11014:10;;11001:11;;10980:67;;;;;;;;;9967:1087;;;;;:::o;6838:115:65:-;6900:4;6923:23;6934:11;6923:10;:23::i;5563:143::-;5632:20;;:::i;:::-;5671:22;;;;:9;:22;;;;;;;5664:35;;;;;;;;5671:28;;5664:35;;5671:28;5664:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5563:143;;;:::o;14387:4032:66:-;14462:22;;:::i;:::-;14496:25;14524:22;;;:9;:22;;;;;14583;14565:14;;;;-1:-1:-1;;;14565:14:66;;;;:40;;;;;;;;;14564:92;;;-1:-1:-1;14627:28:66;14609:14;;;;-1:-1:-1;;;14609:14:66;;;;:46;;;;;;;;;14564:92;14556:158;;;;-1:-1:-1;;;14556:158:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14724:24;;:::i;:::-;-1:-1:-1;14762:19:66;;;;;14751:10;:31;;;;;;;;;;;14724:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14724:58:66;;;;;14828:20;;;:27;14824:180;;;-1:-1:-1;6046:1:66;14888:28;;;;:24;;;:28;;;;;;14824:180;;;-1:-1:-1;6083:1:66;14964:29;;;;:24;;;:29;;;;;;14824:180;15085:3;15031:52;15050:6;:32;;;15031:14;:18;;:52;;;;:::i;:::-;15030:58;;;;;-1:-1:-1;;;;;15142:30:66;;15118:21;15142:30;;;:16;;;:30;;;;;;;;6083:1;15228:20;;:15;;;:20;;;;;;;6046:1;15204:19;;;;;;15030:58;;;;;-1:-1:-1;15142:30:66;15118:21;;15204:45;;:19;:45;:23;:45;:::i;:::-;15304:20;;;;15259:26;15288:37;;;:15;;;:37;;;;;;15340:13;;;;15182:67;;-1:-1:-1;15288:37:66;15340:17;15336:980;;6083:1;15373:38;15486:20;;;:15;;;:20;;;;;;15442:39;;;;15426:91;;15442:74;;15512:3;;15442:65;;:39;:65;:43;:65;:::i;:74::-;15426:11;;:91;:15;:91;:::i;:::-;15373:144;-1:-1:-1;15553:28:66;15535:14;;;;-1:-1:-1;;;15535:14:66;;;;:46;;;;;;;;;15531:744;;;15700:13;;;;15687:26;;15531:744;;;15753:20;;;;15738:11;;:35;15734:541;;;15797:11;;6083:1;15797:18;15793:468;;;15864:30;15843:8;:18;;;:51;15839:274;;;15922:20;15945:54;15980:8;:18;;;15945:30;:34;;:54;;;;:::i;:::-;15922:77;;16072:18;16039:31;16057:12;16039:6;:13;;;:17;;:31;;;;:::i;:::-;16038:52;;;;;;16025:65;;-1:-1:-1;15839:274:66;15793:468;;;16173:13;;;;16224:18;;16173:49;;16191:30;16173:49;:17;:49;:::i;:::-;16172:70;;;;;;16159:83;;15793:468;-1:-1:-1;16304:1:66;16288:13;;;:17;15336:980;16367:29;;;;;;:38;;;:108;;-1:-1:-1;16451:23:66;;16437:38;;;;:13;:38;;;;;;-1:-1:-1;;;;;16421:54:66;;;16437:38;;16421:54;16367:108;:170;;;;-1:-1:-1;16509:28:66;16491:14;;;;-1:-1:-1;;;16491:14:66;;;;:46;;;;;;;;;;16367:170;:212;;;;;6046:1;16553:8;:20;;;:26;16367:212;16363:414;;;16697:18;;;;16620:96;;:72;16673:18;16636:35;16697:18;16659:11;16636:35;:22;:35;:::i;:::-;16635:56;;;;;;16620:7;16628:1;16620:10;;;;;;:72;:14;:72;:::i;:::-;:76;:96;:76;:96;:::i;:::-;16595:121;;16730:29;;;:36;;-1:-1:-1;;16730:36:66;16762:4;16730:36;;;16363:414;-1:-1:-1;;;;;16828:29:66;;16806:19;16828:29;;;:15;;;:29;;;;;16872:16;;;;:21;;;;16871:45;;-1:-1:-1;16899:16:66;;;;;;16871:45;16867:582;;;16954:28;16936:14;;;;-1:-1:-1;;;16936:14:66;;;;:46;;;;;;;;;16932:473;;;17124:3;17068:54;17089:6;:32;;;17068:5;:16;;;:20;;:54;;;;:::i;:::-;17067:60;;;;;;17053:10;;;:75;16932:473;;;17177:10;;17153:20;;;;:34;17149:256;;;17368:20;;;;17343:46;;;;:24;;;:46;;;;;;17305:16;;;;17220:170;;17343:46;17305:36;;17326:14;17305:36;:20;:36;:::i;:::-;17304:85;;;;;;17278:3;17222:54;17243:6;:32;;;17222:5;:16;;;:20;;:54;;;;:::i;:::-;17221:60;;;;;;;17220:170;:83;:170;:::i;:::-;17207:10;;;:183;17149:256;17437:1;17418:16;;;:20;16867:582;17485:17;;;;-1:-1:-1;;;;;17485:33:66;;;:17;;:33;17484:66;;;;;6083:1;17522:8;:20;;;:27;17484:66;:101;;;;-1:-1:-1;17553:17:66;;;;-1:-1:-1;;;;;17553:17:66;:31;;17484:101;17480:214;;;17614:25;;;;17601:10;;;:38;17653:17;;;:30;;-1:-1:-1;;;;;;17653:30:66;;;17480:214;17707:10;;:15;17703:313;;17786:10;;17761:20;;;;:36;;:24;:36::i;:::-;17738:20;;;:59;17819:12;;17855:10;;17819:47;;;-1:-1:-1;;;17819:47:66;;-1:-1:-1;;;;;17819:47:66;;;;;;;;;;;;;;;;:12;;;;;:21;;:47;;;;;17855:10;;17819:47;;;;;;;:12;;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;17819:47:66;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17819:47:66;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17819:47:66;17811:90;;;;;-1:-1:-1;;;17811:90:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;17954:23;;17940:38;;;;:13;:38;;;;;;;;;;17994:10;;17920:85;;;;;;;-1:-1:-1;;;;;17920:85:66;;;;17940:38;;;17927:11;;17920:85;;;;;;;;;;;17703:313;18044:10;;;;18029:26;;18044:7;18037:1;18029:10;;:26;:31;18025:388;;18108:18;;;;-1:-1:-1;;;;;18108:18:66;18076:79;18156:26;18171:7;18179:1;18171:10;;;;18156:7;18164:1;18156:10;;:26;18184:12;18198:11;18076:134;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18076:134:66;-1:-1:-1;;;;;18076:134:66;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18076:134:66;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18076:134:66;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;18298:23:66;;18284:38;;;;:13;18076:134;18284:38;;;;;-1:-1:-1;;;;;18229:173:66;;;;18284:38;18259:11;18229:173;18362:26;18377:7;18385:1;18377:10;;;;18362:7;18370:1;18362:10;;:26;18229:173;;;;;;;;;;;;;;;18025:388;14387:4032;;;;;;;;;;;:::o;10096:109:65:-;10152:7;10179:19;10186:11;10179:6;:19::i;4999:127::-;5075:4;5054:11;7214:23:66;7225:11;7214:10;:23::i;:::-;7206:32;;;;;;5098:21:65;5107:11;5098:8;:21::i;:::-;5091:28;4999:127;-1:-1:-1;;;4999:127:65:o;5656:52:66:-;;;;;;;;;;;;;:::o;820:845:63:-;892:7;935:8;976;716:24;1070:525;1077:17;;1070:525;;1161:12;1176:3;1161:18;1184:3;1160:27;1156:192;;;1304:29;1308:10;1320:12;1304:3;:29::i;:::-;1291:42;;1156:192;1433:1;1417:17;;;;;1452;;1448:137;;1539:31;1543:12;1557;1539:3;:31::i;:::-;1524:46;;1448:137;1070:525;;29411:1759:66;29514:4;6010:1;29572:5;:23;;:36;;;;;29607:1;29599:5;:9;29572:36;29564:65;;;;;-1:-1:-1;;;29564:65:66;;;;;;;;;;;;-1:-1:-1;;;29564:65:66;;;;;;;;;;;;;;;29657:1;29647:7;:11;29639:51;;;;;-1:-1:-1;;;29639:51:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;29705:21;29714:11;29705:8;:21::i;:::-;29701:63;;;-1:-1:-1;29749:4:66;29742:11;;29701:63;29773:25;29801:22;;;:9;:22;;;;;29857:24;29839:14;;;;-1:-1:-1;;;29839:14:66;;;;:42;;;;;;;;;;29838:100;;;;-1:-1:-1;29917:20:66;29899:14;;;;-1:-1:-1;;;29899:14:66;;;;:38;;;;;;;;;;29838:100;29834:143;;;29961:5;29954:12;;;;;29834:143;-1:-1:-1;;;;;30079:25:66;;30055:21;30079:25;;;:16;;;:25;;;;;30119:13;;;;:17;;;;30118:45;;-1:-1:-1;30142:11:66;;:20;;;30118:45;30114:88;;;30186:5;30179:12;;;;;;30114:88;30254:12;;:57;;;-1:-1:-1;;;30254:57:66;;-1:-1:-1;;;;;30254:57:66;;;;;;;30297:4;30254:57;;;;;;;;;;;;30229:7;;30254:12;;;;;:25;;:57;;;;;;;;;;;;;;;30212:14;30254:12;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;30254:57:66;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30254:57:66;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30254:57:66;30246:95;;;;;-1:-1:-1;;;30246:95:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;30374:20;;;;:32;;30399:6;30374:32;:24;:32;:::i;:::-;30351:20;;;:55;30463:13;;;;:25;;30481:6;30463:25;:17;:25;:::i;:::-;30447:13;;;:41;;;-1:-1:-1;;;;30631:52:66;30623:91;;;;;-1:-1:-1;;;30623:91:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30732:8:66;:20;;;:59;;30724:96;;;;;-1:-1:-1;;;30724:96:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;6083:1;30835:5;:12;30831:98;;;30886:20;;;;:32;;30911:6;30886:32;:24;:32;:::i;:::-;30863:20;;;:55;30831:98;30938:19;;;:11;31004:22;;;:15;;;:22;;;;;;30993:34;;:6;;:34;:10;:34;:::i;:::-;30968:22;;;;:15;;;:22;;;;;;;;:59;;;;31075:23;;31061:38;;:13;:38;;;;;;;31042:83;;;;;;;;;;;;;-1:-1:-1;;;;;31042:83:66;;;;31061:38;;;31048:11;;31042:83;;;;;;;;;31142:21;31151:11;31142:8;:21::i;:::-;31135:28;29411:1759;-1:-1:-1;;;;;;;;29411:1759:66:o;35503:366::-;35566:4;35605:22;;;:9;:22;;;;;;;:28;;-1:-1:-1;;;35605:28:66;;;;35662:24;35652:6;:34;;;;;;;;;35651:88;;;-1:-1:-1;35717:21:66;35707:6;:31;;;;;;;;;35651:88;:150;;;-1:-1:-1;35769:31:66;35759:6;:41;;;;;;;;;35651:150;:201;;;-1:-1:-1;35831:20:66;35821:6;:30;;;;;;;;;;35503:366;-1:-1:-1;;;35503:366:66:o;31909:2887::-;32014:4;6010:1;32038:5;:23;;:36;;;;;32073:1;32065:5;:9;32038:36;32030:63;;;;;-1:-1:-1;;;32030:63:66;;;;;;;;;;;;-1:-1:-1;;;32030:63:66;;;;;;;;;;;;;;;32107:21;32116:11;32107:8;:21::i;:::-;32103:63;;;-1:-1:-1;32151:4:66;32144:11;;32103:63;32176:24;;:::i;:::-;-1:-1:-1;32203:10:66;32214:22;;;:9;:22;;;;;;;;:33;;;;;32203:45;;;;;;;;32176:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32176:72:66;;;;;;;32286:22;;;;;;32418:18;;;;32386:85;;-1:-1:-1;;;32386:85:66;;;;;;;;;;;;;;;;;;;;32176:72;;32214:22;;32203:10;;32418:18;;;;;32386:64;;:85;;;;;;;;;;32418:18;32386:85;;;5:2:-1;;;;30:1;27;20:12;5:2;32386:85:66;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32386:85:66;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32386:85:66;;-1:-1:-1;32489:14:66;32481:54;;;;;-1:-1:-1;;;32481:54:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;32567:4;32553:10;:18;;32545:49;;;;;-1:-1:-1;;;32545:49:66;;;;;;;;;;;;-1:-1:-1;;;32545:49:66;;;;;;;;;;;;;;;32618:4;32636:8;32632:55;;-1:-1:-1;32666:10:66;32632:55;-1:-1:-1;;;;;32758:23:66;;;;;;:15;;;:23;;;;;:34;;;:39;32754:82;;32820:5;32813:12;;;;;;;;32754:82;32907:21;;;;:14;;;:21;;;;;;32899:30;;:3;;:30;:7;:30;:::i;:::-;32875:21;;;;:14;;;:21;;;;;;:54;;;33126:20;;;;33111:36;;;;;33087:21;;;;-1:-1:-1;33087:60:66;33086:183;;-1:-1:-1;33203:20:66;;;;;33188:36;;;;:14;;;:36;;;;;;;33166:18;;;;;;:58;33165:103;;;;;6083:1;33241:8;:20;;;:27;33165:103;33082:937;;;33307:21;33289:14;;;;-1:-1:-1;;;33289:14:66;;;;:39;;;;;;;;;:206;;;;-1:-1:-1;33469:24:66;;;;33437:29;;;;:56;33414:14;;;33429:1;33414:17;;33408:3;:23;33407:87;;33289:206;:274;;;-1:-1:-1;33532:31:66;33514:14;;;;-1:-1:-1;;;33514:14:66;;;;:49;;;;;;;;;33289:274;33285:682;;;33641:31;33623:14;;;;-1:-1:-1;;;33623:14:66;;;;:49;;;;;;;;;33619:231;;33737:24;;;;33696:38;;;:65;33783:14;;;:48;;-1:-1:-1;;;;33783:48:66;-1:-1:-1;;;33783:48:66;;;33619:231;33949:3;33929:17;;;:23;33285:682;33980:20;;;:28;;;33082:937;34054:186;;;;;;;;;;;;;;;;;;;;34159:24;34141:14;;;;-1:-1:-1;;;34141:14:66;;;;:42;;;;;;;;;34140:88;;;-1:-1:-1;34207:20:66;34189:14;;;;-1:-1:-1;;;34189:14:66;;;;:38;;;;;;;;;34140:88;34054:186;;;;-1:-1:-1;;;;;34028:23:66;;;;;;:15;;;:23;;;;;;;;;:212;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34028:212:66;;;;;;;;;;34273:24;34255:14;;;;-1:-1:-1;;;34255:14:66;;;;:42;;;;;;;;;34254:88;;;-1:-1:-1;34321:20:66;34303:14;;;;-1:-1:-1;;;34303:14:66;;;;:38;;;;;;;;;34254:88;34250:402;;;34400:31;;;;:24;;;:31;;;;;;34392:40;;:3;;:40;:7;:40;:::i;:::-;34358:31;;;;:24;;;:31;;;;;:74;;;;34475:32;;;;34518:3;;34475:41;;34512:3;34475:41;:36;:41;:::i;:::-;34474:47;;;;;34567:18;;;;34535:106;;;-1:-1:-1;;;34535:106:66;;34474:47;;;;34535:106;;;;;;-1:-1:-1;;;;;34535:106:66;;;;;;;;;;;;;;;34474:47;;-1:-1:-1;34567:18:66;;;34535:66;;:106;;;;;;;;;;;;;;34567:18;;34535:106;;;5:2:-1;;;;30:1;27;20:12;5:2;34535:106:66;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34535:106:66;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;34250:402:66;34706:23;;34692:38;;;;:13;:38;;;;;;;;;;34666:85;;;;;;;;;;;;;-1:-1:-1;;;;;34666:85:66;;;;34692:38;;;34679:11;;34666:85;;;;;;;;;34768:21;34777:11;34768:8;:21::i;1785:265:73:-;1984:58;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1984:58:73;;;;;;;1974:69;;;;;;1785:265::o;609:1026::-;687:7;706:9;725;744:7;804:9;:16;824:2;804:22;800:72;;858:1;842:19;;;;;;;800:72;-1:-1:-1;;;1166:4:73;1151:20;;1145:27;1211:4;1196:20;;1190:27;1264:4;1249:20;;1243:27;1240:1;1235:36;1390:2;1386:6;;1382:44;;;1413:2;1408:7;1382:44;1503:1;:7;;1508:2;1503:7;;:18;;;;;1514:1;:7;;1519:2;1514:7;;1503:18;1499:130;;;1553:1;1537:19;;;;;;;1499:130;1594:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1594:24:73;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1594:24:73;;;;;;;;1587:31;;;;;;;1431:145:76;1489:7;1520:5;;;1543:6;;;;1535:15;;;;;1205:145;1263:7;1295:1;1290;:6;;1282:15;;;;;;-1:-1:-1;1319:5:76;;;1205:145::o;35031:309:66:-;35090:7;35137:22;;;:9;:22;;;;;;;;6046:1;35312:19;;:15;;;:19;;;;;;;35273:20;;;;;;35137:22;;35265:68;;-1:-1:-1;;;;;35265:38:66;;:68;:38;:68;:::i;229:421:76:-;287:7;527:6;523:45;;-1:-1:-1;556:1:76;549:8;;523:45;590:5;;;594:1;590;:5;:1;613:5;;;;;:10;605:19;;;;;778:296;836:7;933:1;929;:5;921:14;;;;;;945:9;961:1;957;:5;;;;;;;778:296;-1:-1:-1;;;;778:296:76:o;1734:181:63:-;1815:7;1841:67;-1:-1:-1;;;;;1845:18:63;;;716:24;1845:29;;;;1876:20;;:31;1841:3;:67::i;22727:6412:66:-;22804:4;22783:11;7214:23;7225:11;7214:10;:23::i;:::-;7206:32;;;;;;22820:25;22848:22;;;:9;:22;;;;;22880:24;;:::i;:::-;-1:-1:-1;22918:19:66;;;;;22907:10;:31;;;;;;;;;;;;22880:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22880:58:66;;;;;22948:27;;:::i;:::-;:38;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22948:38:66;;;;;;;;;;;;;;-1:-1:-1;;;22948:38:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22948:38:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22948:38:66;;;-1:-1:-1;;22948:38:66;;;;;;;;;;;;;;;;23062:18;;;23030:89;;;-1:-1:-1;;;23030:89:66;;;;;;;;;;22948:38;;-1:-1:-1;22948:38:66;;-1:-1:-1;;;;;23062:18:66;;;;23030:76;;:89;;;;;;;;;;23062:18;23030:89;;;5:2:-1;;;;30:1;27;20:12;5:2;23030:89:66;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23030:89:66;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23030:89:66;23226:35;;23433:20;;;;23179;23418:36;;;:14;;;:36;;;;;;23030:89;;-1:-1:-1;23219:3:66;23203:19;;23202:59;;;;23179:20;;;;23418:51;-1:-1:-1;23414:3687:66;;;23568:20;23550:14;;;;-1:-1:-1;;;23550:14:66;;;;:38;;;;;;;;;23546:351;;;23625:30;23608:47;;23546:351;;;23698:24;23680:14;;;;-1:-1:-1;;;23680:14:66;;;;:42;;;;;;;;;23676:221;;;23759:35;23742:52;;23676:221;;;23850:32;23833:49;;23676:221;23910:14;;;:39;;23927:22;;23910:14;-1:-1:-1;;;;23910:39:66;-1:-1:-1;;;23927:22:66;23910:39;;;;;;23414:3687;;;24002:20;23984:14;;;;-1:-1:-1;;;23984:14:66;;;;:38;;;;;;;;;23980:944;;;24137:28;;;;24115:14;;;:17;24109:3;:23;24108:57;24104:806;;24206:28;24189:14;;:45;;-1:-1:-1;;;;24189:45:66;-1:-1:-1;;;24189:45:66;;;6046:1;24256:20;;;:25;;;6046:1;-1:-1:-1;24104:806:66;;;24416:55;24426:8;:19;;;24447:8;:23;;;24416:9;:55::i;:::-;24394:77;;24519:19;24497;24504:11;24497:6;:19::i;:::-;:41;24493:399;;;24633:14;;;:41;;-1:-1:-1;;;;24633:41:66;-1:-1:-1;;;24633:41:66;;;24790:3;24770:17;;;:23;24819:28;;;:50;;;24493:399;24960:24;24942:14;;;;-1:-1:-1;;;24942:14:66;;;;:42;;;;;;;;;24938:2153;;;25026:55;25036:8;:19;;;25057:8;:23;;;25026:9;:55::i;:::-;25192:32;;;;25004:77;;-1:-1:-1;25170:14:66;;;25185:1;25170:17;;25164:3;:23;25163:61;25159:1918;;25274:19;25252;25259:11;25252:6;:19::i;:::-;:41;25248:1258;;;25348:23;;25325:47;;;;:22;:47;;;;;;6326:4;-1:-1:-1;25321:1071:66;;;25493:14;;;;:38;;-1:-1:-1;;;;25493:38:66;-1:-1:-1;;;25493:38:66;;;25652:3;25632:17;;;:23;25708;;-1:-1:-1;25685:47:66;;;:22;:47;;;;;;;;:49;;;;;;;;25925:23;;25897:52;;:27;:52;;;;;;26315:47;;;;;;;26218:19;;;:15;;;:19;;;;;;;;25897:52;;-1:-1:-1;26315:47:66;26211:62;;;26315:47;26210:153;;;;26073:23;;26045:52;;;;:27;:52;;;;;26210:153;;;26140:224;;26045:320;;25321:1071;25248:1258;;;26446:14;;;:37;;26463:20;;26446:14;-1:-1:-1;;;;26446:37:66;-1:-1:-1;;;26463:20:66;26446:37;;25248:1258;25159:1918;;;26591:21;26615:19;26622:11;26615:6;:19::i;:::-;26677:28;;;;26591:43;;-1:-1:-1;26677:53:66;;26710:19;26677:53;:32;:53;:::i;:::-;26660:13;:70;26656:403;;26758:14;;;:37;;-1:-1:-1;;;;26758:37:66;-1:-1:-1;;;26758:37:66;;;26656:403;;;26859:13;26828:8;:28;;;:44;26824:235;;;26900:28;;;:50;;;26981:55;;;;;;;;27003:11;;26981:55;;;;;;;;;;26824:235;25159:1918;;27134:21;27116:14;;;;-1:-1:-1;;;27116:14:66;;;;:39;;;;;;;;;27115:108;;;-1:-1:-1;27191:31:66;27173:14;;;;-1:-1:-1;;;27173:14:66;;;;:49;;;;;;;;;27115:108;27111:405;;;27330:38;;;;27308:17;;;;27302:3;:23;27301:67;27297:209;;27388:14;;;:39;;-1:-1:-1;;;;27388:39:66;-1:-1:-1;;;27388:39:66;;;27462:29;;-1:-1:-1;27297:209:66;27548:19;27530:14;:37;;;;;;;;;27526:1431;;27606:29;27588:14;:47;;;;;;;;;27587:121;;;-1:-1:-1;27675:32:66;27657:14;:50;;;;;;;;;27587:121;27583:938;;;27820:26;;27797:50;;;;:22;:50;;;;;;:57;;27852:1;27797:57;:54;:57;:::i;:::-;27751:26;;27728:50;;;;:22;:50;;;;;;:126;;;;28019:26;;27996:50;;;;28068:21;28064:443;;28141:23;;28168:1;28113:52;;;:27;:52;;;;;:56;28064:443;;;28273:23;;28245:52;;;;:27;:52;;;;;;;;;6046:1;28450:19;;:15;;;:19;;;;;;;28245:52;;-1:-1:-1;28472:16:66;;28395:75;;:50;28245:52;28443:1;28426:18;;28395:50;:30;:50;:::i;:75::-;28394:94;;;;;28347:23;;28319:52;;;;:27;:52;;;;;28394:94;;;28319:169;;28064:443;27583:938;;28607:23;;28593:38;;;;:13;:38;;;;;;;;;;28645:20;;;;28539:169;;;;;;;;;;;;;-1:-1:-1;;;;;28593:38:66;;;;28568:11;;28539:169;;;;;;;;;;;28745:11;28727:46;28758:14;28727:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;28812:18;;;;28865:20;;;;28787:100;;;-1:-1:-1;;;28787:100:66;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28812:18:66;;;;28787:60;;:100;;;;;;;;;;;;;;;28812:18;;28787:100;;;5:2:-1;;;;30:1;27;20:12;5:2;28787:100:66;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28787:100:66;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;28922:24:66;;;;28901:18;;;:45;27526:1431;28991:14;;;;-1:-1:-1;;;28991:14:66;;;;28970:35;;;;;;;;:11;:17;;;:35;;;;;;;;;28966:111;;29038:11;29026:40;29051:8;:14;;;;;;;;;;;;29026:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;28966:111;29112:19;29094:14;:37;;;;;;;;;;;22727:6412;-1:-1:-1;;;;;;;;;;;22727:6412:66:o;1995:383:63:-;2060:7;2260:13;;;2268:5;2260;:13;:5;2291:9;;;;;:18;2283:52;;;;;-1:-1:-1;;;2283:52:63;;;;;;;;;;;;-1:-1:-1;;;2283:52:63;;;;;;;;;;;;;;;612:2;2353:17;;1995:383;-1:-1:-1;;;1995:383:63:o;2461:353::-;2544:7;2790:15;716:24;2745:33;;2790:15;2744:62;;;;;;2461:353;-1:-1:-1;;;2461:353:63:o;336:104:75:-;394:7;424:1;420;:5;:13;;432:1;420:13;;;-1:-1:-1;428:1:75;;336:104;-1:-1:-1;336:104:75:o;220:9987:65:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;220:9987:65;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;220:9987:65;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;220:9987:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;220:9987:65;;;-1:-1:-1;220:9987:65;:::i;:::-;;;:::o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;220:9987:65;;;-1:-1:-1;;220:9987:65:o;:::-;;;;;;;;;;;;;;;;;;463:616:84;1026:20;1064:8;;;463:616::o",
  "source": "pragma solidity ^0.5.4;\n\nimport \"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\";\nimport \"./GenesisProtocolLogic.sol\";\n\n\n/**\n * @title GenesisProtocol implementation -an organization's voting machine scheme.\n */\ncontract GenesisProtocol is IntVoteInterface, GenesisProtocolLogic {\n    using ECDSA for bytes32;\n\n    // Digest describing the data the user signs according EIP 712.\n    // Needs to match what is passed to Metamask.\n    bytes32 public constant DELEGATION_HASH_EIP712 =\n    keccak256(abi.encodePacked(\n    \"address GenesisProtocolAddress\",\n    \"bytes32 ProposalId\",\n    \"uint256 Vote\",\n    \"uint256 AmountToStake\",\n    \"uint256 Nonce\"\n    ));\n\n    mapping(address=>uint256) public stakesNonce; //stakes Nonce\n\n    /**\n     * @dev Constructor\n     */\n    constructor(IERC20 _stakingToken)\n    public\n    // solhint-disable-next-line no-empty-blocks\n    GenesisProtocolLogic(_stakingToken) {\n    }\n\n    /**\n     * @dev staking function\n     * @param _proposalId id of the proposal\n     * @param _vote  NO(2) or YES(1).\n     * @param _amount the betting amount\n     * @return bool true - the proposal has been executed\n     *              false - otherwise.\n     */\n    function stake(bytes32 _proposalId, uint256 _vote, uint256 _amount) external returns(bool) {\n        return _stake(_proposalId, _vote, _amount, msg.sender);\n    }\n\n    /**\n     * @dev stakeWithSignature function\n     * @param _proposalId id of the proposal\n     * @param _vote  NO(2) or YES(1).\n     * @param _amount the betting amount\n     * @param _nonce nonce value ,it is part of the signature to ensure that\n              a signature can be received only once.\n     * @param _signatureType signature type\n              1 - for web3.eth.sign\n              2 - for eth_signTypedData according to EIP #712.\n     * @param _signature  - signed data by the staker\n     * @return bool true - the proposal has been executed\n     *              false - otherwise.\n     */\n    function stakeWithSignature(\n        bytes32 _proposalId,\n        uint256 _vote,\n        uint256 _amount,\n        uint256 _nonce,\n        uint256 _signatureType,\n        bytes calldata _signature\n        )\n        external\n        returns(bool)\n        {\n        // Recreate the digest the user signed\n        bytes32 delegationDigest;\n        if (_signatureType == 2) {\n            delegationDigest = keccak256(\n                abi.encodePacked(\n                    DELEGATION_HASH_EIP712, keccak256(\n                        abi.encodePacked(\n                        address(this),\n                        _proposalId,\n                        _vote,\n                        _amount,\n                        _nonce)\n                    )\n                )\n            );\n        } else {\n            delegationDigest = keccak256(\n                        abi.encodePacked(\n                        address(this),\n                        _proposalId,\n                        _vote,\n                        _amount,\n                        _nonce)\n                    ).toEthSignedMessageHash();\n        }\n        address staker = delegationDigest.recover(_signature);\n        //a garbage staker address due to wrong signature will revert due to lack of approval and funds.\n        require(staker != address(0), \"staker address cannot be 0\");\n        require(stakesNonce[staker] == _nonce);\n        stakesNonce[staker] = stakesNonce[staker].add(1);\n        return _stake(_proposalId, _vote, _amount, staker);\n    }\n\n    /**\n     * @dev voting function\n     * @param _proposalId id of the proposal\n     * @param _vote NO(2) or YES(1).\n     * @param _amount the reputation amount to vote with . if _amount == 0 it will use all voter reputation.\n     * @param _voter voter address\n     * @return bool true - the proposal has been executed\n     *              false - otherwise.\n     */\n    function vote(bytes32 _proposalId, uint256 _vote, uint256 _amount, address _voter)\n    external\n    votable(_proposalId)\n    returns(bool) {\n        Proposal storage proposal = proposals[_proposalId];\n        Parameters memory params = parameters[proposal.paramsHash];\n        address voter;\n        if (params.voteOnBehalf != address(0)) {\n            require(msg.sender == params.voteOnBehalf);\n            voter = _voter;\n        } else {\n            voter = msg.sender;\n        }\n        return internalVote(_proposalId, voter, _vote, _amount);\n    }\n\n  /**\n   * @dev Cancel the vote of the msg.sender.\n   * cancel vote is not allow in genesisProtocol so this function doing nothing.\n   * This function is here in order to comply to the IntVoteInterface .\n   */\n    function cancelVote(bytes32 _proposalId) external votable(_proposalId) {\n       //this is not allowed\n        return;\n    }\n\n    /**\n      * @dev execute check if the proposal has been decided, and if so, execute the proposal\n      * @param _proposalId the id of the proposal\n      * @return bool true - the proposal has been executed\n      *              false - otherwise.\n     */\n    function execute(bytes32 _proposalId) external votable(_proposalId) returns(bool) {\n        return _execute(_proposalId);\n    }\n\n  /**\n    * @dev getNumberOfChoices returns the number of choices possible in this proposal\n    * @return uint256 that contains number of choices\n    */\n    function getNumberOfChoices(bytes32) external view returns(uint256) {\n        return NUM_OF_CHOICES;\n    }\n\n    /**\n      * @dev getProposalTimes returns proposals times variables.\n      * @param _proposalId id of the proposal\n      * @return proposals times array\n      */\n    function getProposalTimes(bytes32 _proposalId) external view returns(uint[3] memory times) {\n        return proposals[_proposalId].times;\n    }\n\n    /**\n     * @dev voteInfo returns the vote and the amount of reputation of the user committed to this proposal\n     * @param _proposalId the ID of the proposal\n     * @param _voter the address of the voter\n     * @return uint256 vote - the voters vote\n     *        uint256 reputation - amount of reputation committed by _voter to _proposalId\n     */\n    function voteInfo(bytes32 _proposalId, address _voter) external view returns(uint, uint) {\n        Voter memory voter = proposals[_proposalId].voters[_voter];\n        return (voter.vote, voter.reputation);\n    }\n\n    /**\n    * @dev voteStatus returns the reputation voted for a proposal for a specific voting choice.\n    * @param _proposalId the ID of the proposal\n    * @param _choice the index in the\n    * @return voted reputation for the given choice\n    */\n    function voteStatus(bytes32 _proposalId, uint256 _choice) external view returns(uint256) {\n        return proposals[_proposalId].votes[_choice];\n    }\n\n    /**\n    * @dev isVotable check if the proposal is votable\n    * @param _proposalId the ID of the proposal\n    * @return bool true or false\n    */\n    function isVotable(bytes32 _proposalId) external view returns(bool) {\n        return _isVotable(_proposalId);\n    }\n\n    /**\n    * @dev proposalStatus return the total votes and stakes for a given proposal\n    * @param _proposalId the ID of the proposal\n    * @return uint256 preBoostedVotes YES\n    * @return uint256 preBoostedVotes NO\n    * @return uint256 total stakes YES\n    * @return uint256 total stakes NO\n    */\n    function proposalStatus(bytes32 _proposalId) external view returns(uint256, uint256, uint256, uint256) {\n        return (\n                proposals[_proposalId].preBoostedVotes[YES],\n                proposals[_proposalId].preBoostedVotes[NO],\n                proposals[_proposalId].stakes[YES],\n                proposals[_proposalId].stakes[NO]\n        );\n    }\n\n  /**\n    * @dev getProposalOrganization return the organizationId for a given proposal\n    * @param _proposalId the ID of the proposal\n    * @return bytes32 organization identifier\n    */\n    function getProposalOrganization(bytes32 _proposalId) external view returns(bytes32) {\n        return (proposals[_proposalId].organizationId);\n    }\n\n    /**\n      * @dev getStaker return the vote and stake amount for a given proposal and staker\n      * @param _proposalId the ID of the proposal\n      * @param _staker staker address\n      * @return uint256 vote\n      * @return uint256 amount\n    */\n    function getStaker(bytes32 _proposalId, address _staker) external view returns(uint256, uint256) {\n        return (proposals[_proposalId].stakers[_staker].vote, proposals[_proposalId].stakers[_staker].amount);\n    }\n\n    /**\n      * @dev voteStake return the amount stakes for a given proposal and vote\n      * @param _proposalId the ID of the proposal\n      * @param _vote vote number\n      * @return uint256 stake amount\n    */\n    function voteStake(bytes32 _proposalId, uint256 _vote) external view returns(uint256) {\n        return proposals[_proposalId].stakes[_vote];\n    }\n\n  /**\n    * @dev voteStake return the winningVote for a given proposal\n    * @param _proposalId the ID of the proposal\n    * @return uint256 winningVote\n    */\n    function winningVote(bytes32 _proposalId) external view returns(uint256) {\n        return proposals[_proposalId].winningVote;\n    }\n\n    /**\n      * @dev voteStake return the state for a given proposal\n      * @param _proposalId the ID of the proposal\n      * @return ProposalState proposal state\n    */\n    function state(bytes32 _proposalId) external view returns(ProposalState) {\n        return proposals[_proposalId].state;\n    }\n\n   /**\n    * @dev isAbstainAllow returns if the voting machine allow abstain (0)\n    * @return bool true or false\n    */\n    function isAbstainAllow() external pure returns(bool) {\n        return false;\n    }\n\n    /**\n     * @dev getAllowedRangeOfChoices returns the allowed range of choices for a voting machine.\n     * @return min - minimum number of choices\n               max - maximum number of choices\n     */\n    function getAllowedRangeOfChoices() external pure returns(uint256 min, uint256 max) {\n        return (YES, NO);\n    }\n\n    /**\n     * @dev score return the proposal score\n     * @param _proposalId the ID of the proposal\n     * @return uint256 proposal score.\n     */\n    function score(bytes32 _proposalId) public view returns(uint256) {\n        return  _score(_proposalId);\n    }\n}\n",
  "sourcePath": "@daostack/infra/contracts/votingMachines/GenesisProtocol.sol",
  "ast": {
    "absolutePath": "@daostack/infra/contracts/votingMachines/GenesisProtocol.sol",
    "exportedSymbols": {
      "GenesisProtocol": [
        17867
      ]
    },
    "id": 17868,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 17376,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:65"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
        "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
        "id": 17377,
        "nodeType": "ImportDirective",
        "scope": 17868,
        "sourceUnit": 21029,
        "src": "25:64:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/infra/contracts/votingMachines/GenesisProtocolLogic.sol",
        "file": "./GenesisProtocolLogic.sol",
        "id": 17378,
        "nodeType": "ImportDirective",
        "scope": 17868,
        "sourceUnit": 20437,
        "src": "90:36:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 17379,
              "name": "IntVoteInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20571,
              "src": "248:16:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IntVoteInterface_$20571",
                "typeString": "contract IntVoteInterface"
              }
            },
            "id": 17380,
            "nodeType": "InheritanceSpecifier",
            "src": "248:16:65"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 17381,
              "name": "GenesisProtocolLogic",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20436,
              "src": "266:20:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GenesisProtocolLogic_$20436",
                "typeString": "contract GenesisProtocolLogic"
              }
            },
            "id": 17382,
            "nodeType": "InheritanceSpecifier",
            "src": "266:20:65"
          }
        ],
        "contractDependencies": [
          20436,
          20571
        ],
        "contractKind": "contract",
        "documentation": "@title GenesisProtocol implementation -an organization's voting machine scheme.",
        "fullyImplemented": true,
        "id": 17867,
        "linearizedBaseContracts": [
          17867,
          20436,
          20571
        ],
        "name": "GenesisProtocol",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 17385,
            "libraryName": {
              "contractScope": null,
              "id": 17383,
              "name": "ECDSA",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21028,
              "src": "299:5:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ECDSA_$21028",
                "typeString": "library ECDSA"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "293:24:65",
            "typeName": {
              "id": 17384,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "309:7:65",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "constant": true,
            "id": 17397,
            "name": "DELEGATION_HASH_EIP712",
            "nodeType": "VariableDeclaration",
            "scope": 17867,
            "src": "441:220:65",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 17386,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "441:7:65",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "hexValue": "616464726573732047656e6573697350726f746f636f6c41646472657373",
                      "id": 17390,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "526:32:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_f6f81c79222251f266116add8ba75554a893ee5a90e2827df720a8738b6852ea",
                        "typeString": "literal_string \"address GenesisProtocolAddress\""
                      },
                      "value": "address GenesisProtocolAddress"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "627974657333322050726f706f73616c4964",
                      "id": 17391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "564:20:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c82636388059bdf5f5ea03cfec7d8e327d93cc6aaa4cd8e5544d7950722aea62",
                        "typeString": "literal_string \"bytes32 ProposalId\""
                      },
                      "value": "bytes32 ProposalId"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e7432353620566f7465",
                      "id": 17392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "590:14:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_5b7c3f5ffe3403c4b459a64b441be5b523982a2df65457e729fee531305984ff",
                        "typeString": "literal_string \"uint256 Vote\""
                      },
                      "value": "uint256 Vote"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e7432353620416d6f756e74546f5374616b65",
                      "id": 17393,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "610:23:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_eaeb9db97e42ac65bdd1048a940a8f71fc1af8b56d16e6cd3de10e163148977c",
                        "typeString": "literal_string \"uint256 AmountToStake\""
                      },
                      "value": "uint256 AmountToStake"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e74323536204e6f6e6365",
                      "id": 17394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "639:15:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_f461d9cb6c7bbc73c9b53173ca291dd54af24fcc1e3e4e673a2da79ed63c9b73",
                        "typeString": "literal_string \"uint256 Nonce\""
                      },
                      "value": "uint256 Nonce"
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_stringliteral_f6f81c79222251f266116add8ba75554a893ee5a90e2827df720a8738b6852ea",
                        "typeString": "literal_string \"address GenesisProtocolAddress\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_c82636388059bdf5f5ea03cfec7d8e327d93cc6aaa4cd8e5544d7950722aea62",
                        "typeString": "literal_string \"bytes32 ProposalId\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_5b7c3f5ffe3403c4b459a64b441be5b523982a2df65457e729fee531305984ff",
                        "typeString": "literal_string \"uint256 Vote\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_eaeb9db97e42ac65bdd1048a940a8f71fc1af8b56d16e6cd3de10e163148977c",
                        "typeString": "literal_string \"uint256 AmountToStake\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_f461d9cb6c7bbc73c9b53173ca291dd54af24fcc1e3e4e673a2da79ed63c9b73",
                        "typeString": "literal_string \"uint256 Nonce\""
                      }
                    ],
                    "expression": {
                      "argumentTypes": null,
                      "id": 17388,
                      "name": "abi",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22158,
                      "src": "504:3:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_abi",
                        "typeString": "abi"
                      }
                    },
                    "id": 17389,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "encodePacked",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "504:16:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                      "typeString": "function () pure returns (bytes memory)"
                    }
                  },
                  "id": 17395,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "504:156:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                ],
                "id": 17387,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 22165,
                "src": "494:9:65",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 17396,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "494:167:65",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 17401,
            "name": "stakesNonce",
            "nodeType": "VariableDeclaration",
            "scope": 17867,
            "src": "668:44:65",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 17400,
              "keyType": {
                "id": 17398,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "676:7:65",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "668:25:65",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 17399,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "685:7:65",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17409,
              "nodeType": "Block",
              "src": "908:7:65",
              "statements": []
            },
            "documentation": "@dev Constructor",
            "id": 17410,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17406,
                    "name": "_stakingToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17403,
                    "src": "893:13:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$22137",
                      "typeString": "contract IERC20"
                    }
                  }
                ],
                "id": 17407,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17405,
                  "name": "GenesisProtocolLogic",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20436,
                  "src": "872:20:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_GenesisProtocolLogic_$20436_$",
                    "typeString": "type(contract GenesisProtocolLogic)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "872:35:65"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17403,
                  "name": "_stakingToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 17410,
                  "src": "786:20:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$22137",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17402,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22137,
                    "src": "786:6:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$22137",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "785:22:65"
            },
            "returnParameters": {
              "id": 17408,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "908:0:65"
            },
            "scope": 17867,
            "src": "774:141:65",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17429,
              "nodeType": "Block",
              "src": "1278:71:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17422,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17412,
                        "src": "1302:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17423,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17414,
                        "src": "1315:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17424,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17416,
                        "src": "1322:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17425,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "1331:3:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17426,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1331:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 17421,
                      "name": "_stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20071,
                      "src": "1295:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint256,uint256,address) returns (bool)"
                      }
                    },
                    "id": 17427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1295:47:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 17420,
                  "id": 17428,
                  "nodeType": "Return",
                  "src": "1288:54:65"
                }
              ]
            },
            "documentation": "@dev staking function\n@param _proposalId id of the proposal\n@param _vote  NO(2) or YES(1).\n@param _amount the betting amount\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 17430,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stake",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17417,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17412,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17430,
                  "src": "1202:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17411,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1202:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17414,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 17430,
                  "src": "1223:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17413,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1223:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17416,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 17430,
                  "src": "1238:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17415,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1238:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1201:53:65"
            },
            "returnParameters": {
              "id": 17420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17419,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17430,
                  "src": "1272:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17418,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1272:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1271:6:65"
            },
            "scope": 17867,
            "src": "1187:162:65",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17536,
              "nodeType": "Block",
              "src": "2212:1257:65",
              "statements": [
                {
                  "assignments": [
                    17448
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17448,
                      "name": "delegationDigest",
                      "nodeType": "VariableDeclaration",
                      "scope": 17536,
                      "src": "2269:24:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 17447,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2269:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17449,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2269:24:65"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 17452,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17450,
                      "name": "_signatureType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17440,
                      "src": "2307:14:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 17451,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2325:1:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "2307:19:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 17492,
                    "nodeType": "Block",
                    "src": "2745:315:65",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17490,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17475,
                            "name": "delegationDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17448,
                            "src": "2759:16:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 17480,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 22231,
                                            "src": "2863:4:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_GenesisProtocol_$17867",
                                              "typeString": "contract GenesisProtocol"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_GenesisProtocol_$17867",
                                              "typeString": "contract GenesisProtocol"
                                            }
                                          ],
                                          "id": 17479,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "2855:7:65",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": "address"
                                        },
                                        "id": 17481,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2855:13:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 17482,
                                        "name": "_proposalId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 17432,
                                        "src": "2894:11:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 17483,
                                        "name": "_vote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 17434,
                                        "src": "2931:5:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 17484,
                                        "name": "_amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 17436,
                                        "src": "2962:7:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 17485,
                                        "name": "_nonce",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 17438,
                                        "src": "2995:6:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 17477,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 22158,
                                        "src": "2813:3:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 17478,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "encodePacked",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "2813:16:65",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 17486,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2813:189:65",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 17476,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22165,
                                  "src": "2778:9:65",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 17487,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2778:246:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 17488,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toEthSignedMessageHash",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21027,
                              "src": "2778:269:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                                "typeString": "function (bytes32) pure returns (bytes32)"
                              }
                            },
                            "id": 17489,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2778:271:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2759:290:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 17491,
                        "nodeType": "ExpressionStatement",
                        "src": "2759:290:65"
                      }
                    ]
                  },
                  "id": 17493,
                  "nodeType": "IfStatement",
                  "src": "2303:757:65",
                  "trueBody": {
                    "id": 17474,
                    "nodeType": "Block",
                    "src": "2328:411:65",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17453,
                            "name": "delegationDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17448,
                            "src": "2342:16:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 17457,
                                    "name": "DELEGATION_HASH_EIP712",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 17397,
                                    "src": "2426:22:65",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 17462,
                                                "name": "this",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 22231,
                                                "src": "2535:4:65",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_GenesisProtocol_$17867",
                                                  "typeString": "contract GenesisProtocol"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_contract$_GenesisProtocol_$17867",
                                                  "typeString": "contract GenesisProtocol"
                                                }
                                              ],
                                              "id": 17461,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "2527:7:65",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": "address"
                                            },
                                            "id": 17463,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2527:13:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 17464,
                                            "name": "_proposalId",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 17432,
                                            "src": "2566:11:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 17465,
                                            "name": "_vote",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 17434,
                                            "src": "2603:5:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 17466,
                                            "name": "_amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 17436,
                                            "src": "2634:7:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 17467,
                                            "name": "_nonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 17438,
                                            "src": "2667:6:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 17459,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 22158,
                                            "src": "2485:3:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 17460,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "2485:16:65",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 17468,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2485:189:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 17458,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22165,
                                      "src": "2450:9:65",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 17469,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2450:246:65",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 17455,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22158,
                                    "src": "2388:3:65",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 17456,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2388:16:65",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 17470,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2388:326:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 17454,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22165,
                              "src": "2361:9:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 17471,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2361:367:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2342:386:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 17473,
                        "nodeType": "ExpressionStatement",
                        "src": "2342:386:65"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    17495
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17495,
                      "name": "staker",
                      "nodeType": "VariableDeclaration",
                      "scope": 17536,
                      "src": "3069:14:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17494,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3069:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17500,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17498,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17442,
                        "src": "3111:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17496,
                        "name": "delegationDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17448,
                        "src": "3086:16:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 17497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21011,
                      "src": "3086:24:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 17499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3086:36:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3069:53:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 17506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 17502,
                          "name": "staker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17495,
                          "src": "3245:6:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 17504,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3263:1:65",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 17503,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3255:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 17505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3255:10:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3245:20:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7374616b657220616464726573732063616e6e6f742062652030",
                        "id": 17507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3267:28:65",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3430815440156fda2758a526d662027048e6496bf994b390c4dc85badccdf423",
                          "typeString": "literal_string \"staker address cannot be 0\""
                        },
                        "value": "staker address cannot be 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3430815440156fda2758a526d662027048e6496bf994b390c4dc85badccdf423",
                          "typeString": "literal_string \"staker address cannot be 0\""
                        }
                      ],
                      "id": 17501,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "3237:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3237:59:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17509,
                  "nodeType": "ExpressionStatement",
                  "src": "3237:59:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 17515,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 17511,
                            "name": "stakesNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17401,
                            "src": "3314:11:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 17513,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17512,
                            "name": "staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17495,
                            "src": "3326:6:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3314:19:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 17514,
                          "name": "_nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17438,
                          "src": "3337:6:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3314:29:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 17510,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "3306:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 17516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3306:38:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17517,
                  "nodeType": "ExpressionStatement",
                  "src": "3306:38:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17527,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17518,
                        "name": "stakesNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17401,
                        "src": "3354:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 17520,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17519,
                        "name": "staker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17495,
                        "src": "3366:6:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3354:19:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 17525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3400:1:65",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 17521,
                            "name": "stakesNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17401,
                            "src": "3376:11:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 17523,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17522,
                            "name": "staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17495,
                            "src": "3388:6:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3376:19:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17524,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "3376:23:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 17526,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3376:26:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3354:48:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17528,
                  "nodeType": "ExpressionStatement",
                  "src": "3354:48:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17530,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17432,
                        "src": "3426:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17531,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17434,
                        "src": "3439:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17532,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17436,
                        "src": "3446:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17533,
                        "name": "staker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17495,
                        "src": "3455:6:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 17529,
                      "name": "_stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20071,
                      "src": "3419:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint256,uint256,address) returns (bool)"
                      }
                    },
                    "id": 17534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3419:43:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 17446,
                  "id": 17535,
                  "nodeType": "Return",
                  "src": "3412:50:65"
                }
              ]
            },
            "documentation": "@dev stakeWithSignature function\n@param _proposalId id of the proposal\n@param _vote  NO(2) or YES(1).\n@param _amount the betting amount\n@param _nonce nonce value ,it is part of the signature to ensure that\na signature can be received only once.\n@param _signatureType signature type\n1 - for web3.eth.sign\n2 - for eth_signTypedData according to EIP #712.\n@param _signature  - signed data by the staker\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 17537,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stakeWithSignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17432,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "1996:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17431,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1996:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17434,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2025:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17433,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2025:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17436,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2048:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17435,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2048:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17438,
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2073:14:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17437,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2073:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17440,
                  "name": "_signatureType",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2097:22:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17439,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2097:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17442,
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2129:25:65",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 17441,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2129:5:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1986:178:65"
            },
            "returnParameters": {
              "id": 17446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17445,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2198:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17444,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2197:6:65"
            },
            "scope": 17867,
            "src": "1959:1510:65",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17602,
              "nodeType": "Block",
              "src": "3981:415:65",
              "statements": [
                {
                  "assignments": [
                    17554
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17554,
                      "name": "proposal",
                      "nodeType": "VariableDeclaration",
                      "scope": 17602,
                      "src": "3991:25:65",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$18002_storage_ptr",
                        "typeString": "struct GenesisProtocolLogic.Proposal"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17553,
                        "name": "Proposal",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 18002,
                        "src": "3991:8:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$18002_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Proposal"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17558,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17555,
                      "name": "proposals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18078,
                      "src": "4019:9:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                        "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                      }
                    },
                    "id": 17557,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17556,
                      "name": "_proposalId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17539,
                      "src": "4029:11:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4019:22:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                      "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3991:50:65"
                },
                {
                  "assignments": [
                    17560
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17560,
                      "name": "params",
                      "nodeType": "VariableDeclaration",
                      "scope": 17602,
                      "src": "4051:24:65",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Parameters_$17937_memory_ptr",
                        "typeString": "struct GenesisProtocolLogic.Parameters"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17559,
                        "name": "Parameters",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 17937,
                        "src": "4051:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Parameters_$17937_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Parameters"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17565,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17561,
                      "name": "parameters",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18074,
                      "src": "4078:10:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Parameters_$17937_storage_$",
                        "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Parameters storage ref)"
                      }
                    },
                    "id": 17564,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 17562,
                        "name": "proposal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17554,
                        "src": "4089:8:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$18002_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage pointer"
                        }
                      },
                      "id": 17563,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paramsHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17965,
                      "src": "4089:19:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4078:31:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Parameters_$17937_storage",
                      "typeString": "struct GenesisProtocolLogic.Parameters storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4051:58:65"
                },
                {
                  "assignments": [
                    17567
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17567,
                      "name": "voter",
                      "nodeType": "VariableDeclaration",
                      "scope": 17602,
                      "src": "4119:13:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17566,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4119:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17568,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4119:13:65"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 17574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 17569,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17560,
                        "src": "4146:6:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Parameters_$17937_memory_ptr",
                          "typeString": "struct GenesisProtocolLogic.Parameters memory"
                        }
                      },
                      "id": 17570,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "voteOnBehalf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17936,
                      "src": "4146:19:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 17572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4177:1:65",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 17571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4169:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 17573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4169:10:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "4146:33:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 17593,
                    "nodeType": "Block",
                    "src": "4282:43:65",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17588,
                            "name": "voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17567,
                            "src": "4296:5:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 17589,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22171,
                              "src": "4304:3:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 17590,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4304:10:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "4296:18:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 17592,
                        "nodeType": "ExpressionStatement",
                        "src": "4296:18:65"
                      }
                    ]
                  },
                  "id": 17594,
                  "nodeType": "IfStatement",
                  "src": "4142:183:65",
                  "trueBody": {
                    "id": 17587,
                    "nodeType": "Block",
                    "src": "4181:95:65",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 17580,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 17576,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "4203:3:65",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 17577,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4203:10:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 17578,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17560,
                                  "src": "4217:6:65",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Parameters_$17937_memory_ptr",
                                    "typeString": "struct GenesisProtocolLogic.Parameters memory"
                                  }
                                },
                                "id": 17579,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "voteOnBehalf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 17936,
                                "src": "4217:19:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "4203:33:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 17575,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22174,
                            "src": "4195:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 17581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4195:42:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 17582,
                        "nodeType": "ExpressionStatement",
                        "src": "4195:42:65"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17583,
                            "name": "voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17567,
                            "src": "4251:5:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 17584,
                            "name": "_voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17545,
                            "src": "4259:6:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4251:14:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 17586,
                        "nodeType": "ExpressionStatement",
                        "src": "4251:14:65"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17596,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17539,
                        "src": "4354:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17597,
                        "name": "voter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17567,
                        "src": "4367:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17598,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17541,
                        "src": "4374:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17599,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17543,
                        "src": "4381:7:65",
                        "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"
                        }
                      ],
                      "id": 17595,
                      "name": "internalVote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20366,
                      "src": "4341:12:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (bytes32,address,uint256,uint256) returns (bool)"
                      }
                    },
                    "id": 17600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4341:48:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 17552,
                  "id": 17601,
                  "nodeType": "Return",
                  "src": "4334:55:65"
                }
              ]
            },
            "documentation": "@dev voting function\n@param _proposalId id of the proposal\n@param _vote NO(2) or YES(1).\n@param _amount the reputation amount to vote with . if _amount == 0 it will use all voter reputation.\n@param _voter voter address\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 17603,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17548,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17539,
                    "src": "3950:11:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 17549,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17547,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 18145,
                  "src": "3942:7:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3942:20:65"
              }
            ],
            "name": "vote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17539,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17603,
                  "src": "3856:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17538,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3856:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17541,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 17603,
                  "src": "3877:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17540,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3877:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17543,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 17603,
                  "src": "3892:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17542,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3892:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17545,
                  "name": "_voter",
                  "nodeType": "VariableDeclaration",
                  "scope": 17603,
                  "src": "3909:14:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17544,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3909:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3855:69:65"
            },
            "returnParameters": {
              "id": 17552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17551,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17603,
                  "src": "3975:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17550,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3975:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3974:6:65"
            },
            "scope": 17867,
            "src": "3842:554:65",
            "stateMutability": "nonpayable",
            "superFunction": 20530,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17612,
              "nodeType": "Block",
              "src": "4683:52:65",
              "statements": [
                {
                  "expression": null,
                  "functionReturnParameters": 17610,
                  "id": 17611,
                  "nodeType": "Return",
                  "src": "4722:7:65"
                }
              ]
            },
            "documentation": "@dev Cancel the vote of the msg.sender.\ncancel vote is not allow in genesisProtocol so this function doing nothing.\nThis function is here in order to comply to the IntVoteInterface .",
            "id": 17613,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17608,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17605,
                    "src": "4670:11:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 17609,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17607,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 18145,
                  "src": "4662:7:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4662:20:65"
              }
            ],
            "name": "cancelVote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17605,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17613,
                  "src": "4632:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17604,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4632:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4631:21:65"
            },
            "returnParameters": {
              "id": 17610,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4683:0:65"
            },
            "scope": 17867,
            "src": "4612:123:65",
            "stateMutability": "nonpayable",
            "superFunction": 20535,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17627,
              "nodeType": "Block",
              "src": "5081:45:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17624,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17615,
                        "src": "5107:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 17623,
                      "name": "_execute",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19885,
                      "src": "5098:8:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (bytes32) returns (bool)"
                      }
                    },
                    "id": 17625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5098:21:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 17622,
                  "id": 17626,
                  "nodeType": "Return",
                  "src": "5091:28:65"
                }
              ]
            },
            "documentation": "@dev execute check if the proposal has been decided, and if so, execute the proposal\n@param _proposalId the id of the proposal\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 17628,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17618,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17615,
                    "src": "5054:11:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 17619,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17617,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 18145,
                  "src": "5046:7:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5046:20:65"
              }
            ],
            "name": "execute",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17615,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17628,
                  "src": "5016:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17614,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5016:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5015:21:65"
            },
            "returnParameters": {
              "id": 17622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17621,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17628,
                  "src": "5075:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17620,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5075:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5074:6:65"
            },
            "scope": 17867,
            "src": "4999:127:65",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17637,
              "nodeType": "Block",
              "src": "5353:38:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17635,
                    "name": "NUM_OF_CHOICES",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18093,
                    "src": "5370:14:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17634,
                  "id": 17636,
                  "nodeType": "Return",
                  "src": "5363:21:65"
                }
              ]
            },
            "documentation": "@dev getNumberOfChoices returns the number of choices possible in this proposal\n@return uint256 that contains number of choices",
            "id": 17638,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNumberOfChoices",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17630,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17638,
                  "src": "5313:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17629,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5313:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5312:9:65"
            },
            "returnParameters": {
              "id": 17634,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17633,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17638,
                  "src": "5344:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17632,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5344:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5343:9:65"
            },
            "scope": 17867,
            "src": "5285:106:65",
            "stateMutability": "view",
            "superFunction": 20542,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17652,
              "nodeType": "Block",
              "src": "5654:52:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17647,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18078,
                        "src": "5671:9:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 17649,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17648,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17640,
                        "src": "5681:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5671:22:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 17650,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "times",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17979,
                    "src": "5671:28:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$3_storage",
                      "typeString": "uint256[3] storage ref"
                    }
                  },
                  "functionReturnParameters": 17646,
                  "id": 17651,
                  "nodeType": "Return",
                  "src": "5664:35:65"
                }
              ]
            },
            "documentation": "@dev getProposalTimes returns proposals times variables.\n@param _proposalId id of the proposal\n@return proposals times array",
            "id": 17653,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProposalTimes",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17641,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17640,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17653,
                  "src": "5589:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17639,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5589:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5588:21:65"
            },
            "returnParameters": {
              "id": 17646,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17645,
                  "name": "times",
                  "nodeType": "VariableDeclaration",
                  "scope": 17653,
                  "src": "5632:20:65",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr",
                    "typeString": "uint256[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 17642,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "5632:4:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 17644,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 17643,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5637:1:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5632:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$3_storage_ptr",
                      "typeString": "uint256[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5631:22:65"
            },
            "scope": 17867,
            "src": "5563:143:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17679,
              "nodeType": "Block",
              "src": "6155:122:65",
              "statements": [
                {
                  "assignments": [
                    17665
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17665,
                      "name": "voter",
                      "nodeType": "VariableDeclaration",
                      "scope": 17679,
                      "src": "6165:18:65",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Voter_$17944_memory_ptr",
                        "typeString": "struct GenesisProtocolLogic.Voter"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17664,
                        "name": "Voter",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 17944,
                        "src": "6165:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Voter_$17944_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Voter"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17672,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17666,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18078,
                          "src": "6186:9:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 17668,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17667,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17655,
                          "src": "6196:11:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6186:22:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 17669,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "voters",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17993,
                      "src": "6186:29:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Voter_$17944_storage_$",
                        "typeString": "mapping(address => struct GenesisProtocolLogic.Voter storage ref)"
                      }
                    },
                    "id": 17671,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17670,
                      "name": "_voter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17657,
                      "src": "6216:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6186:37:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Voter_$17944_storage",
                      "typeString": "struct GenesisProtocolLogic.Voter storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6165:58:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17673,
                          "name": "voter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17665,
                          "src": "6241:5:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Voter_$17944_memory_ptr",
                            "typeString": "struct GenesisProtocolLogic.Voter memory"
                          }
                        },
                        "id": 17674,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "vote",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 17939,
                        "src": "6241:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17675,
                          "name": "voter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17665,
                          "src": "6253:5:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Voter_$17944_memory_ptr",
                            "typeString": "struct GenesisProtocolLogic.Voter memory"
                          }
                        },
                        "id": 17676,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reputation",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 17941,
                        "src": "6253:16:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17677,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "6240:30:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17663,
                  "id": 17678,
                  "nodeType": "Return",
                  "src": "6233:37:65"
                }
              ]
            },
            "documentation": "@dev voteInfo returns the vote and the amount of reputation of the user committed to this proposal\n@param _proposalId the ID of the proposal\n@param _voter the address of the voter\n@return uint256 vote - the voters vote\n       uint256 reputation - amount of reputation committed by _voter to _proposalId",
            "id": 17680,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteInfo",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17658,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17655,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17680,
                  "src": "6084:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17654,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6084:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17657,
                  "name": "_voter",
                  "nodeType": "VariableDeclaration",
                  "scope": 17680,
                  "src": "6105:14:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17656,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6105:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6083:37:65"
            },
            "returnParameters": {
              "id": 17663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17660,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17680,
                  "src": "6143:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17659,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6143:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17662,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17680,
                  "src": "6149:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17661,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6149:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6142:12:65"
            },
            "scope": 17867,
            "src": "6066:211:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17696,
              "nodeType": "Block",
              "src": "6621:61:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17689,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18078,
                          "src": "6638:9:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 17691,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17690,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17682,
                          "src": "6648:11:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6638:22:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 17692,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "votes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17985,
                      "src": "6638:28:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 17694,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17693,
                      "name": "_choice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17684,
                      "src": "6667:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6638:37:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17688,
                  "id": 17695,
                  "nodeType": "Return",
                  "src": "6631:44:65"
                }
              ]
            },
            "documentation": "@dev voteStatus returns the reputation voted for a proposal for a specific voting choice.\n@param _proposalId the ID of the proposal\n@param _choice the index in the\n@return voted reputation for the given choice",
            "id": 17697,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17682,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17697,
                  "src": "6552:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17681,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6552:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17684,
                  "name": "_choice",
                  "nodeType": "VariableDeclaration",
                  "scope": 17697,
                  "src": "6573:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17683,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6573:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6551:38:65"
            },
            "returnParameters": {
              "id": 17688,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17687,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17697,
                  "src": "6612:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17686,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6612:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6611:9:65"
            },
            "scope": 17867,
            "src": "6532:150:65",
            "stateMutability": "view",
            "superFunction": 20558,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17708,
              "nodeType": "Block",
              "src": "6906:47:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17705,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17699,
                        "src": "6934:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 17704,
                      "name": "_isVotable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20435,
                      "src": "6923:10:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (bytes32) view returns (bool)"
                      }
                    },
                    "id": 17706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6923:23:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 17703,
                  "id": 17707,
                  "nodeType": "Return",
                  "src": "6916:30:65"
                }
              ]
            },
            "documentation": "@dev isVotable check if the proposal is votable\n@param _proposalId the ID of the proposal\n@return bool true or false",
            "id": 17709,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isVotable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17700,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17699,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17709,
                  "src": "6857:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17698,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6857:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6856:21:65"
            },
            "returnParameters": {
              "id": 17703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17702,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17709,
                  "src": "6900:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17701,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6900:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6899:6:65"
            },
            "scope": 17867,
            "src": "6838:115:65",
            "stateMutability": "view",
            "superFunction": 20549,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17748,
              "nodeType": "Block",
              "src": "7366:258:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17722,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18078,
                              "src": "7401:9:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 17724,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17723,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17711,
                              "src": "7411:11:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7401:22:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 17725,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "preBoostedVotes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 17989,
                          "src": "7401:38:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 17727,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17726,
                          "name": "YES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18099,
                          "src": "7440:3:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7401:43:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17728,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18078,
                              "src": "7462:9:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 17730,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17729,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17711,
                              "src": "7472:11:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7462:22:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 17731,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "preBoostedVotes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 17989,
                          "src": "7462:38:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 17733,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17732,
                          "name": "NO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18096,
                          "src": "7501:2:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7462:42:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17734,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18078,
                              "src": "7522:9:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 17736,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17735,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17711,
                              "src": "7532:11:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7522:22:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 17737,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "stakes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 17997,
                          "src": "7522:29:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 17739,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17738,
                          "name": "YES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18099,
                          "src": "7552:3:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7522:34:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17740,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18078,
                              "src": "7574:9:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 17742,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17741,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17711,
                              "src": "7584:11:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7574:22:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 17743,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "stakes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 17997,
                          "src": "7574:29:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 17745,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17744,
                          "name": "NO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18096,
                          "src": "7604:2:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7574:33:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17746,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "7383:234:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17721,
                  "id": 17747,
                  "nodeType": "Return",
                  "src": "7376:241:65"
                }
              ]
            },
            "documentation": "@dev proposalStatus return the total votes and stakes for a given proposal\n@param _proposalId the ID of the proposal\n@return uint256 preBoostedVotes YES\n@return uint256 preBoostedVotes NO\n@return uint256 total stakes YES\n@return uint256 total stakes NO",
            "id": 17749,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proposalStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17712,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17711,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17749,
                  "src": "7287:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17710,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7287:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7286:21:65"
            },
            "returnParameters": {
              "id": 17721,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17714,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17749,
                  "src": "7330:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17713,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7330:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17716,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17749,
                  "src": "7339:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17715,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7339:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17718,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17749,
                  "src": "7348:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7348:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17720,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17749,
                  "src": "7357:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17719,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7357:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7329:36:65"
            },
            "scope": 17867,
            "src": "7263:361:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17762,
              "nodeType": "Block",
              "src": "7904:63:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 17756,
                            "name": "proposals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18078,
                            "src": "7922:9:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                              "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                            }
                          },
                          "id": 17758,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17757,
                            "name": "_proposalId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17751,
                            "src": "7932:11:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7922:22:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                            "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                          }
                        },
                        "id": 17759,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "organizationId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 17953,
                        "src": "7922:37:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "id": 17760,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "7921:39:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 17755,
                  "id": 17761,
                  "nodeType": "Return",
                  "src": "7914:46:65"
                }
              ]
            },
            "documentation": "@dev getProposalOrganization return the organizationId for a given proposal\n@param _proposalId the ID of the proposal\n@return bytes32 organization identifier",
            "id": 17763,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProposalOrganization",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17751,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17763,
                  "src": "7852:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17750,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7852:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7851:21:65"
            },
            "returnParameters": {
              "id": 17755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17754,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17763,
                  "src": "7895:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17753,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7895:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7894:9:65"
            },
            "scope": 17867,
            "src": "7819:148:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17790,
              "nodeType": "Block",
              "src": "8321:118:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 17774,
                                "name": "proposals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18078,
                                "src": "8339:9:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                  "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                                }
                              },
                              "id": 17776,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 17775,
                                "name": "_proposalId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17765,
                                "src": "8349:11:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8339:22:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                                "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                              }
                            },
                            "id": 17777,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "stakers",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18001,
                            "src": "8339:30:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Staker_$17951_storage_$",
                              "typeString": "mapping(address => struct GenesisProtocolLogic.Staker storage ref)"
                            }
                          },
                          "id": 17779,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17778,
                            "name": "_staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17767,
                            "src": "8370:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8339:39:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Staker_$17951_storage",
                            "typeString": "struct GenesisProtocolLogic.Staker storage ref"
                          }
                        },
                        "id": 17780,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "vote",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 17946,
                        "src": "8339:44:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 17781,
                                "name": "proposals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18078,
                                "src": "8385:9:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                  "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                                }
                              },
                              "id": 17783,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 17782,
                                "name": "_proposalId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17765,
                                "src": "8395:11:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8385:22:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                                "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                              }
                            },
                            "id": 17784,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "stakers",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18001,
                            "src": "8385:30:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Staker_$17951_storage_$",
                              "typeString": "mapping(address => struct GenesisProtocolLogic.Staker storage ref)"
                            }
                          },
                          "id": 17786,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17785,
                            "name": "_staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17767,
                            "src": "8416:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8385:39:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Staker_$17951_storage",
                            "typeString": "struct GenesisProtocolLogic.Staker storage ref"
                          }
                        },
                        "id": 17787,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 17948,
                        "src": "8385:46:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17788,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "8338:94:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17773,
                  "id": 17789,
                  "nodeType": "Return",
                  "src": "8331:101:65"
                }
              ]
            },
            "documentation": "@dev getStaker return the vote and stake amount for a given proposal and staker\n@param _proposalId the ID of the proposal\n@param _staker staker address\n@return uint256 vote\n@return uint256 amount",
            "id": 17791,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getStaker",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17765,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17791,
                  "src": "8243:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17764,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8243:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17767,
                  "name": "_staker",
                  "nodeType": "VariableDeclaration",
                  "scope": 17791,
                  "src": "8264:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17766,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8264:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8242:38:65"
            },
            "returnParameters": {
              "id": 17773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17770,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17791,
                  "src": "8303:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17769,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8303:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17772,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17791,
                  "src": "8312:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17771,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8312:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8302:18:65"
            },
            "scope": 17867,
            "src": "8224:215:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17807,
              "nodeType": "Block",
              "src": "8744:60:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17800,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18078,
                          "src": "8761:9:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 17802,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17801,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17793,
                          "src": "8771:11:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8761:22:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 17803,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stakes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17997,
                      "src": "8761:29:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 17805,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17804,
                      "name": "_vote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17795,
                      "src": "8791:5:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8761:36:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17799,
                  "id": 17806,
                  "nodeType": "Return",
                  "src": "8754:43:65"
                }
              ]
            },
            "documentation": "@dev voteStake return the amount stakes for a given proposal and vote\n@param _proposalId the ID of the proposal\n@param _vote vote number\n@return uint256 stake amount",
            "id": 17808,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteStake",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17793,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17808,
                  "src": "8677:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17792,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8677:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17795,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 17808,
                  "src": "8698:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8698:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8676:36:65"
            },
            "returnParameters": {
              "id": 17799,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17798,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17808,
                  "src": "8735:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17797,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8735:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8734:9:65"
            },
            "scope": 17867,
            "src": "8658:146:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17820,
              "nodeType": "Block",
              "src": "9043:58:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17815,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18078,
                        "src": "9060:9:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 17817,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17816,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17810,
                        "src": "9070:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9060:22:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 17818,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "winningVote",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17959,
                    "src": "9060:34:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17814,
                  "id": 17819,
                  "nodeType": "Return",
                  "src": "9053:41:65"
                }
              ]
            },
            "documentation": "@dev voteStake return the winningVote for a given proposal\n@param _proposalId the ID of the proposal\n@return uint256 winningVote",
            "id": 17821,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "winningVote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17811,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17810,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17821,
                  "src": "8991:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17809,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8991:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8990:21:65"
            },
            "returnParameters": {
              "id": 17814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17813,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17821,
                  "src": "9034:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17812,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9034:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9033:9:65"
            },
            "scope": 17867,
            "src": "8970:131:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17833,
              "nodeType": "Block",
              "src": "9351:52:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17828,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18078,
                        "src": "9368:9:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 17830,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17829,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17823,
                        "src": "9378:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9368:22:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 17831,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "state",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17957,
                    "src": "9368:28:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ProposalState_$17903",
                      "typeString": "enum GenesisProtocolLogic.ProposalState"
                    }
                  },
                  "functionReturnParameters": 17827,
                  "id": 17832,
                  "nodeType": "Return",
                  "src": "9361:35:65"
                }
              ]
            },
            "documentation": "@dev voteStake return the state for a given proposal\n@param _proposalId the ID of the proposal\n@return ProposalState proposal state",
            "id": 17834,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "state",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17824,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17823,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17834,
                  "src": "9293:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17822,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9293:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9292:21:65"
            },
            "returnParameters": {
              "id": 17827,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17826,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17834,
                  "src": "9336:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ProposalState_$17903",
                    "typeString": "enum GenesisProtocolLogic.ProposalState"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17825,
                    "name": "ProposalState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 17903,
                    "src": "9336:13:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ProposalState_$17903",
                      "typeString": "enum GenesisProtocolLogic.ProposalState"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9335:15:65"
            },
            "scope": 17867,
            "src": "9278:125:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17841,
              "nodeType": "Block",
              "src": "9584:29:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 17839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9601:5:65",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 17838,
                  "id": 17840,
                  "nodeType": "Return",
                  "src": "9594:12:65"
                }
              ]
            },
            "documentation": "@dev isAbstainAllow returns if the voting machine allow abstain (0)\n@return bool true or false",
            "id": 17842,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAbstainAllow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17835,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9553:2:65"
            },
            "returnParameters": {
              "id": 17838,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17837,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17842,
                  "src": "9578:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17836,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9578:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9577:6:65"
            },
            "scope": 17867,
            "src": "9530:83:65",
            "stateMutability": "pure",
            "superFunction": 20563,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17853,
              "nodeType": "Block",
              "src": "9909:33:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 17849,
                        "name": "YES",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18099,
                        "src": "9927:3:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17850,
                        "name": "NO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18096,
                        "src": "9932:2:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17851,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "9926:9:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17848,
                  "id": 17852,
                  "nodeType": "Return",
                  "src": "9919:16:65"
                }
              ]
            },
            "documentation": "@dev getAllowedRangeOfChoices returns the allowed range of choices for a voting machine.\n@return min - minimum number of choices\nmax - maximum number of choices",
            "id": 17854,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAllowedRangeOfChoices",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17843,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9858:2:65"
            },
            "returnParameters": {
              "id": 17848,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17845,
                  "name": "min",
                  "nodeType": "VariableDeclaration",
                  "scope": 17854,
                  "src": "9883:11:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17844,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9883:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17847,
                  "name": "max",
                  "nodeType": "VariableDeclaration",
                  "scope": 17854,
                  "src": "9896:11:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17846,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9896:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9882:26:65"
            },
            "scope": 17867,
            "src": "9825:117:65",
            "stateMutability": "pure",
            "superFunction": 20570,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17865,
              "nodeType": "Block",
              "src": "10161:44:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17862,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17856,
                        "src": "10186:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 17861,
                      "name": "_score",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20395,
                      "src": "10179:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (bytes32) view returns (uint256)"
                      }
                    },
                    "id": 17863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10179:19:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17860,
                  "id": 17864,
                  "nodeType": "Return",
                  "src": "10171:27:65"
                }
              ]
            },
            "documentation": "@dev score return the proposal score\n@param _proposalId the ID of the proposal\n@return uint256 proposal score.",
            "id": 17866,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "score",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17856,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17866,
                  "src": "10111:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17855,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10111:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10110:21:65"
            },
            "returnParameters": {
              "id": 17860,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17859,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17866,
                  "src": "10152:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17858,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10152:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10151:9:65"
            },
            "scope": 17867,
            "src": "10096:109:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 17868,
        "src": "220:9987:65"
      }
    ],
    "src": "0:10208:65"
  },
  "legacyAST": {
    "absolutePath": "@daostack/infra/contracts/votingMachines/GenesisProtocol.sol",
    "exportedSymbols": {
      "GenesisProtocol": [
        17867
      ]
    },
    "id": 17868,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 17376,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:65"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
        "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol",
        "id": 17377,
        "nodeType": "ImportDirective",
        "scope": 17868,
        "sourceUnit": 21029,
        "src": "25:64:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/infra/contracts/votingMachines/GenesisProtocolLogic.sol",
        "file": "./GenesisProtocolLogic.sol",
        "id": 17378,
        "nodeType": "ImportDirective",
        "scope": 17868,
        "sourceUnit": 20437,
        "src": "90:36:65",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 17379,
              "name": "IntVoteInterface",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20571,
              "src": "248:16:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IntVoteInterface_$20571",
                "typeString": "contract IntVoteInterface"
              }
            },
            "id": 17380,
            "nodeType": "InheritanceSpecifier",
            "src": "248:16:65"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 17381,
              "name": "GenesisProtocolLogic",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20436,
              "src": "266:20:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GenesisProtocolLogic_$20436",
                "typeString": "contract GenesisProtocolLogic"
              }
            },
            "id": 17382,
            "nodeType": "InheritanceSpecifier",
            "src": "266:20:65"
          }
        ],
        "contractDependencies": [
          20436,
          20571
        ],
        "contractKind": "contract",
        "documentation": "@title GenesisProtocol implementation -an organization's voting machine scheme.",
        "fullyImplemented": true,
        "id": 17867,
        "linearizedBaseContracts": [
          17867,
          20436,
          20571
        ],
        "name": "GenesisProtocol",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 17385,
            "libraryName": {
              "contractScope": null,
              "id": 17383,
              "name": "ECDSA",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21028,
              "src": "299:5:65",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ECDSA_$21028",
                "typeString": "library ECDSA"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "293:24:65",
            "typeName": {
              "id": 17384,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "309:7:65",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "constant": true,
            "id": 17397,
            "name": "DELEGATION_HASH_EIP712",
            "nodeType": "VariableDeclaration",
            "scope": 17867,
            "src": "441:220:65",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 17386,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "441:7:65",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "hexValue": "616464726573732047656e6573697350726f746f636f6c41646472657373",
                      "id": 17390,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "526:32:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_f6f81c79222251f266116add8ba75554a893ee5a90e2827df720a8738b6852ea",
                        "typeString": "literal_string \"address GenesisProtocolAddress\""
                      },
                      "value": "address GenesisProtocolAddress"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "627974657333322050726f706f73616c4964",
                      "id": 17391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "564:20:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c82636388059bdf5f5ea03cfec7d8e327d93cc6aaa4cd8e5544d7950722aea62",
                        "typeString": "literal_string \"bytes32 ProposalId\""
                      },
                      "value": "bytes32 ProposalId"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e7432353620566f7465",
                      "id": 17392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "590:14:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_5b7c3f5ffe3403c4b459a64b441be5b523982a2df65457e729fee531305984ff",
                        "typeString": "literal_string \"uint256 Vote\""
                      },
                      "value": "uint256 Vote"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e7432353620416d6f756e74546f5374616b65",
                      "id": 17393,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "610:23:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_eaeb9db97e42ac65bdd1048a940a8f71fc1af8b56d16e6cd3de10e163148977c",
                        "typeString": "literal_string \"uint256 AmountToStake\""
                      },
                      "value": "uint256 AmountToStake"
                    },
                    {
                      "argumentTypes": null,
                      "hexValue": "75696e74323536204e6f6e6365",
                      "id": 17394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "639:15:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_f461d9cb6c7bbc73c9b53173ca291dd54af24fcc1e3e4e673a2da79ed63c9b73",
                        "typeString": "literal_string \"uint256 Nonce\""
                      },
                      "value": "uint256 Nonce"
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_stringliteral_f6f81c79222251f266116add8ba75554a893ee5a90e2827df720a8738b6852ea",
                        "typeString": "literal_string \"address GenesisProtocolAddress\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_c82636388059bdf5f5ea03cfec7d8e327d93cc6aaa4cd8e5544d7950722aea62",
                        "typeString": "literal_string \"bytes32 ProposalId\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_5b7c3f5ffe3403c4b459a64b441be5b523982a2df65457e729fee531305984ff",
                        "typeString": "literal_string \"uint256 Vote\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_eaeb9db97e42ac65bdd1048a940a8f71fc1af8b56d16e6cd3de10e163148977c",
                        "typeString": "literal_string \"uint256 AmountToStake\""
                      },
                      {
                        "typeIdentifier": "t_stringliteral_f461d9cb6c7bbc73c9b53173ca291dd54af24fcc1e3e4e673a2da79ed63c9b73",
                        "typeString": "literal_string \"uint256 Nonce\""
                      }
                    ],
                    "expression": {
                      "argumentTypes": null,
                      "id": 17388,
                      "name": "abi",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22158,
                      "src": "504:3:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_abi",
                        "typeString": "abi"
                      }
                    },
                    "id": 17389,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "encodePacked",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "504:16:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                      "typeString": "function () pure returns (bytes memory)"
                    }
                  },
                  "id": 17395,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "504:156:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                ],
                "id": 17387,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 22165,
                "src": "494:9:65",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 17396,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "494:167:65",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 17401,
            "name": "stakesNonce",
            "nodeType": "VariableDeclaration",
            "scope": 17867,
            "src": "668:44:65",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 17400,
              "keyType": {
                "id": 17398,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "676:7:65",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "668:25:65",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 17399,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "685:7:65",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17409,
              "nodeType": "Block",
              "src": "908:7:65",
              "statements": []
            },
            "documentation": "@dev Constructor",
            "id": 17410,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17406,
                    "name": "_stakingToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17403,
                    "src": "893:13:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$22137",
                      "typeString": "contract IERC20"
                    }
                  }
                ],
                "id": 17407,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17405,
                  "name": "GenesisProtocolLogic",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20436,
                  "src": "872:20:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_GenesisProtocolLogic_$20436_$",
                    "typeString": "type(contract GenesisProtocolLogic)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "872:35:65"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17404,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17403,
                  "name": "_stakingToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 17410,
                  "src": "786:20:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$22137",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17402,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22137,
                    "src": "786:6:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$22137",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "785:22:65"
            },
            "returnParameters": {
              "id": 17408,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "908:0:65"
            },
            "scope": 17867,
            "src": "774:141:65",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 17429,
              "nodeType": "Block",
              "src": "1278:71:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17422,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17412,
                        "src": "1302:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17423,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17414,
                        "src": "1315:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17424,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17416,
                        "src": "1322:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17425,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "1331:3:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 17426,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1331:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 17421,
                      "name": "_stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20071,
                      "src": "1295:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint256,uint256,address) returns (bool)"
                      }
                    },
                    "id": 17427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1295:47:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 17420,
                  "id": 17428,
                  "nodeType": "Return",
                  "src": "1288:54:65"
                }
              ]
            },
            "documentation": "@dev staking function\n@param _proposalId id of the proposal\n@param _vote  NO(2) or YES(1).\n@param _amount the betting amount\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 17430,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stake",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17417,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17412,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17430,
                  "src": "1202:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17411,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1202:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17414,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 17430,
                  "src": "1223:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17413,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1223:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17416,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 17430,
                  "src": "1238:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17415,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1238:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1201:53:65"
            },
            "returnParameters": {
              "id": 17420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17419,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17430,
                  "src": "1272:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17418,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1272:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1271:6:65"
            },
            "scope": 17867,
            "src": "1187:162:65",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17536,
              "nodeType": "Block",
              "src": "2212:1257:65",
              "statements": [
                {
                  "assignments": [
                    17448
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17448,
                      "name": "delegationDigest",
                      "nodeType": "VariableDeclaration",
                      "scope": 17536,
                      "src": "2269:24:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 17447,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2269:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17449,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2269:24:65"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 17452,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 17450,
                      "name": "_signatureType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17440,
                      "src": "2307:14:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 17451,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2325:1:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "2307:19:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 17492,
                    "nodeType": "Block",
                    "src": "2745:315:65",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17490,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17475,
                            "name": "delegationDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17448,
                            "src": "2759:16:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 17480,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 22231,
                                            "src": "2863:4:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_GenesisProtocol_$17867",
                                              "typeString": "contract GenesisProtocol"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_GenesisProtocol_$17867",
                                              "typeString": "contract GenesisProtocol"
                                            }
                                          ],
                                          "id": 17479,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "2855:7:65",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": "address"
                                        },
                                        "id": 17481,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2855:13:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 17482,
                                        "name": "_proposalId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 17432,
                                        "src": "2894:11:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 17483,
                                        "name": "_vote",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 17434,
                                        "src": "2931:5:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 17484,
                                        "name": "_amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 17436,
                                        "src": "2962:7:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "id": 17485,
                                        "name": "_nonce",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 17438,
                                        "src": "2995:6:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 17477,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 22158,
                                        "src": "2813:3:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 17478,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "encodePacked",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "2813:16:65",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 17486,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2813:189:65",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 17476,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22165,
                                  "src": "2778:9:65",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 17487,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2778:246:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 17488,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toEthSignedMessageHash",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21027,
                              "src": "2778:269:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$",
                                "typeString": "function (bytes32) pure returns (bytes32)"
                              }
                            },
                            "id": 17489,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2778:271:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2759:290:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 17491,
                        "nodeType": "ExpressionStatement",
                        "src": "2759:290:65"
                      }
                    ]
                  },
                  "id": 17493,
                  "nodeType": "IfStatement",
                  "src": "2303:757:65",
                  "trueBody": {
                    "id": 17474,
                    "nodeType": "Block",
                    "src": "2328:411:65",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17453,
                            "name": "delegationDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17448,
                            "src": "2342:16:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 17457,
                                    "name": "DELEGATION_HASH_EIP712",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 17397,
                                    "src": "2426:22:65",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 17462,
                                                "name": "this",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 22231,
                                                "src": "2535:4:65",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_GenesisProtocol_$17867",
                                                  "typeString": "contract GenesisProtocol"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_contract$_GenesisProtocol_$17867",
                                                  "typeString": "contract GenesisProtocol"
                                                }
                                              ],
                                              "id": 17461,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "2527:7:65",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": "address"
                                            },
                                            "id": 17463,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2527:13:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 17464,
                                            "name": "_proposalId",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 17432,
                                            "src": "2566:11:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 17465,
                                            "name": "_vote",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 17434,
                                            "src": "2603:5:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 17466,
                                            "name": "_amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 17436,
                                            "src": "2634:7:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 17467,
                                            "name": "_nonce",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 17438,
                                            "src": "2667:6:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 17459,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 22158,
                                            "src": "2485:3:65",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 17460,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "2485:16:65",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 17468,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2485:189:65",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 17458,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22165,
                                      "src": "2450:9:65",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 17469,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2450:246:65",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 17455,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22158,
                                    "src": "2388:3:65",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 17456,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2388:16:65",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 17470,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2388:326:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 17454,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22165,
                              "src": "2361:9:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 17471,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2361:367:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2342:386:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 17473,
                        "nodeType": "ExpressionStatement",
                        "src": "2342:386:65"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    17495
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17495,
                      "name": "staker",
                      "nodeType": "VariableDeclaration",
                      "scope": 17536,
                      "src": "3069:14:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17494,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3069:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17500,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17498,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17442,
                        "src": "3111:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 17496,
                        "name": "delegationDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17448,
                        "src": "3086:16:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 17497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "recover",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21011,
                      "src": "3086:24:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 17499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3086:36:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3069:53:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 17506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 17502,
                          "name": "staker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17495,
                          "src": "3245:6:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 17504,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3263:1:65",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 17503,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3255:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 17505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3255:10:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3245:20:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7374616b657220616464726573732063616e6e6f742062652030",
                        "id": 17507,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3267:28:65",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3430815440156fda2758a526d662027048e6496bf994b390c4dc85badccdf423",
                          "typeString": "literal_string \"staker address cannot be 0\""
                        },
                        "value": "staker address cannot be 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3430815440156fda2758a526d662027048e6496bf994b390c4dc85badccdf423",
                          "typeString": "literal_string \"staker address cannot be 0\""
                        }
                      ],
                      "id": 17501,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "3237:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3237:59:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17509,
                  "nodeType": "ExpressionStatement",
                  "src": "3237:59:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 17515,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 17511,
                            "name": "stakesNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17401,
                            "src": "3314:11:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 17513,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17512,
                            "name": "staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17495,
                            "src": "3326:6:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3314:19:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 17514,
                          "name": "_nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17438,
                          "src": "3337:6:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3314:29:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 17510,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "3306:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 17516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3306:38:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17517,
                  "nodeType": "ExpressionStatement",
                  "src": "3306:38:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17527,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17518,
                        "name": "stakesNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17401,
                        "src": "3354:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 17520,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17519,
                        "name": "staker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17495,
                        "src": "3366:6:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3354:19:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 17525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3400:1:65",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 17521,
                            "name": "stakesNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17401,
                            "src": "3376:11:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 17523,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17522,
                            "name": "staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17495,
                            "src": "3388:6:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3376:19:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 17524,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "3376:23:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 17526,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3376:26:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3354:48:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 17528,
                  "nodeType": "ExpressionStatement",
                  "src": "3354:48:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17530,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17432,
                        "src": "3426:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17531,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17434,
                        "src": "3439:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17532,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17436,
                        "src": "3446:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17533,
                        "name": "staker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17495,
                        "src": "3455:6:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 17529,
                      "name": "_stake",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20071,
                      "src": "3419:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint256,uint256,address) returns (bool)"
                      }
                    },
                    "id": 17534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3419:43:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 17446,
                  "id": 17535,
                  "nodeType": "Return",
                  "src": "3412:50:65"
                }
              ]
            },
            "documentation": "@dev stakeWithSignature function\n@param _proposalId id of the proposal\n@param _vote  NO(2) or YES(1).\n@param _amount the betting amount\n@param _nonce nonce value ,it is part of the signature to ensure that\na signature can be received only once.\n@param _signatureType signature type\n1 - for web3.eth.sign\n2 - for eth_signTypedData according to EIP #712.\n@param _signature  - signed data by the staker\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 17537,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stakeWithSignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17432,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "1996:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17431,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1996:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17434,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2025:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17433,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2025:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17436,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2048:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17435,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2048:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17438,
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2073:14:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17437,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2073:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17440,
                  "name": "_signatureType",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2097:22:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17439,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2097:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17442,
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2129:25:65",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 17441,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2129:5:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1986:178:65"
            },
            "returnParameters": {
              "id": 17446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17445,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17537,
                  "src": "2198:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17444,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2197:6:65"
            },
            "scope": 17867,
            "src": "1959:1510:65",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17602,
              "nodeType": "Block",
              "src": "3981:415:65",
              "statements": [
                {
                  "assignments": [
                    17554
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17554,
                      "name": "proposal",
                      "nodeType": "VariableDeclaration",
                      "scope": 17602,
                      "src": "3991:25:65",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$18002_storage_ptr",
                        "typeString": "struct GenesisProtocolLogic.Proposal"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17553,
                        "name": "Proposal",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 18002,
                        "src": "3991:8:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$18002_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Proposal"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17558,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17555,
                      "name": "proposals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18078,
                      "src": "4019:9:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                        "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                      }
                    },
                    "id": 17557,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17556,
                      "name": "_proposalId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17539,
                      "src": "4029:11:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4019:22:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                      "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3991:50:65"
                },
                {
                  "assignments": [
                    17560
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17560,
                      "name": "params",
                      "nodeType": "VariableDeclaration",
                      "scope": 17602,
                      "src": "4051:24:65",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Parameters_$17937_memory_ptr",
                        "typeString": "struct GenesisProtocolLogic.Parameters"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17559,
                        "name": "Parameters",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 17937,
                        "src": "4051:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Parameters_$17937_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Parameters"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17565,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 17561,
                      "name": "parameters",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18074,
                      "src": "4078:10:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Parameters_$17937_storage_$",
                        "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Parameters storage ref)"
                      }
                    },
                    "id": 17564,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 17562,
                        "name": "proposal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17554,
                        "src": "4089:8:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$18002_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage pointer"
                        }
                      },
                      "id": 17563,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "paramsHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17965,
                      "src": "4089:19:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4078:31:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Parameters_$17937_storage",
                      "typeString": "struct GenesisProtocolLogic.Parameters storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4051:58:65"
                },
                {
                  "assignments": [
                    17567
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17567,
                      "name": "voter",
                      "nodeType": "VariableDeclaration",
                      "scope": 17602,
                      "src": "4119:13:65",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17566,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4119:7:65",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17568,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4119:13:65"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 17574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 17569,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17560,
                        "src": "4146:6:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Parameters_$17937_memory_ptr",
                          "typeString": "struct GenesisProtocolLogic.Parameters memory"
                        }
                      },
                      "id": 17570,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "voteOnBehalf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17936,
                      "src": "4146:19:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 17572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4177:1:65",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 17571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4169:7:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 17573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4169:10:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "4146:33:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 17593,
                    "nodeType": "Block",
                    "src": "4282:43:65",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17588,
                            "name": "voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17567,
                            "src": "4296:5:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 17589,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22171,
                              "src": "4304:3:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 17590,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4304:10:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "4296:18:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 17592,
                        "nodeType": "ExpressionStatement",
                        "src": "4296:18:65"
                      }
                    ]
                  },
                  "id": 17594,
                  "nodeType": "IfStatement",
                  "src": "4142:183:65",
                  "trueBody": {
                    "id": 17587,
                    "nodeType": "Block",
                    "src": "4181:95:65",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 17580,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 17576,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22171,
                                  "src": "4203:3:65",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 17577,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4203:10:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 17578,
                                  "name": "params",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 17560,
                                  "src": "4217:6:65",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Parameters_$17937_memory_ptr",
                                    "typeString": "struct GenesisProtocolLogic.Parameters memory"
                                  }
                                },
                                "id": 17579,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "voteOnBehalf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 17936,
                                "src": "4217:19:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "4203:33:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 17575,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22174,
                            "src": "4195:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 17581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4195:42:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 17582,
                        "nodeType": "ExpressionStatement",
                        "src": "4195:42:65"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 17585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 17583,
                            "name": "voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17567,
                            "src": "4251:5:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 17584,
                            "name": "_voter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17545,
                            "src": "4259:6:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4251:14:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 17586,
                        "nodeType": "ExpressionStatement",
                        "src": "4251:14:65"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17596,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17539,
                        "src": "4354:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17597,
                        "name": "voter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17567,
                        "src": "4367:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17598,
                        "name": "_vote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17541,
                        "src": "4374:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17599,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17543,
                        "src": "4381:7:65",
                        "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"
                        }
                      ],
                      "id": 17595,
                      "name": "internalVote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20366,
                      "src": "4341:12:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (bytes32,address,uint256,uint256) returns (bool)"
                      }
                    },
                    "id": 17600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4341:48:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 17552,
                  "id": 17601,
                  "nodeType": "Return",
                  "src": "4334:55:65"
                }
              ]
            },
            "documentation": "@dev voting function\n@param _proposalId id of the proposal\n@param _vote NO(2) or YES(1).\n@param _amount the reputation amount to vote with . if _amount == 0 it will use all voter reputation.\n@param _voter voter address\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 17603,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17548,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17539,
                    "src": "3950:11:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 17549,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17547,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 18145,
                  "src": "3942:7:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3942:20:65"
              }
            ],
            "name": "vote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17539,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17603,
                  "src": "3856:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17538,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3856:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17541,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 17603,
                  "src": "3877:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17540,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3877:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17543,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 17603,
                  "src": "3892:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17542,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3892:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17545,
                  "name": "_voter",
                  "nodeType": "VariableDeclaration",
                  "scope": 17603,
                  "src": "3909:14:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17544,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3909:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3855:69:65"
            },
            "returnParameters": {
              "id": 17552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17551,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17603,
                  "src": "3975:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17550,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3975:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3974:6:65"
            },
            "scope": 17867,
            "src": "3842:554:65",
            "stateMutability": "nonpayable",
            "superFunction": 20530,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17612,
              "nodeType": "Block",
              "src": "4683:52:65",
              "statements": [
                {
                  "expression": null,
                  "functionReturnParameters": 17610,
                  "id": 17611,
                  "nodeType": "Return",
                  "src": "4722:7:65"
                }
              ]
            },
            "documentation": "@dev Cancel the vote of the msg.sender.\ncancel vote is not allow in genesisProtocol so this function doing nothing.\nThis function is here in order to comply to the IntVoteInterface .",
            "id": 17613,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17608,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17605,
                    "src": "4670:11:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 17609,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17607,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 18145,
                  "src": "4662:7:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4662:20:65"
              }
            ],
            "name": "cancelVote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17605,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17613,
                  "src": "4632:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17604,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4632:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4631:21:65"
            },
            "returnParameters": {
              "id": 17610,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4683:0:65"
            },
            "scope": 17867,
            "src": "4612:123:65",
            "stateMutability": "nonpayable",
            "superFunction": 20535,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17627,
              "nodeType": "Block",
              "src": "5081:45:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17624,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17615,
                        "src": "5107:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 17623,
                      "name": "_execute",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19885,
                      "src": "5098:8:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (bytes32) returns (bool)"
                      }
                    },
                    "id": 17625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5098:21:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 17622,
                  "id": 17626,
                  "nodeType": "Return",
                  "src": "5091:28:65"
                }
              ]
            },
            "documentation": "@dev execute check if the proposal has been decided, and if so, execute the proposal\n@param _proposalId the id of the proposal\n@return bool true - the proposal has been executed\n             false - otherwise.",
            "id": 17628,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 17618,
                    "name": "_proposalId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 17615,
                    "src": "5054:11:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 17619,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 17617,
                  "name": "votable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 18145,
                  "src": "5046:7:65",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5046:20:65"
              }
            ],
            "name": "execute",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17615,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17628,
                  "src": "5016:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17614,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5016:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5015:21:65"
            },
            "returnParameters": {
              "id": 17622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17621,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17628,
                  "src": "5075:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17620,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5075:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5074:6:65"
            },
            "scope": 17867,
            "src": "4999:127:65",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17637,
              "nodeType": "Block",
              "src": "5353:38:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 17635,
                    "name": "NUM_OF_CHOICES",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 18093,
                    "src": "5370:14:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17634,
                  "id": 17636,
                  "nodeType": "Return",
                  "src": "5363:21:65"
                }
              ]
            },
            "documentation": "@dev getNumberOfChoices returns the number of choices possible in this proposal\n@return uint256 that contains number of choices",
            "id": 17638,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNumberOfChoices",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17630,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17638,
                  "src": "5313:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17629,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5313:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5312:9:65"
            },
            "returnParameters": {
              "id": 17634,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17633,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17638,
                  "src": "5344:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17632,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5344:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5343:9:65"
            },
            "scope": 17867,
            "src": "5285:106:65",
            "stateMutability": "view",
            "superFunction": 20542,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17652,
              "nodeType": "Block",
              "src": "5654:52:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17647,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18078,
                        "src": "5671:9:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 17649,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17648,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17640,
                        "src": "5681:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5671:22:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 17650,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "times",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17979,
                    "src": "5671:28:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$3_storage",
                      "typeString": "uint256[3] storage ref"
                    }
                  },
                  "functionReturnParameters": 17646,
                  "id": 17651,
                  "nodeType": "Return",
                  "src": "5664:35:65"
                }
              ]
            },
            "documentation": "@dev getProposalTimes returns proposals times variables.\n@param _proposalId id of the proposal\n@return proposals times array",
            "id": 17653,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProposalTimes",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17641,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17640,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17653,
                  "src": "5589:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17639,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5589:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5588:21:65"
            },
            "returnParameters": {
              "id": 17646,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17645,
                  "name": "times",
                  "nodeType": "VariableDeclaration",
                  "scope": 17653,
                  "src": "5632:20:65",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$3_memory_ptr",
                    "typeString": "uint256[3]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 17642,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "5632:4:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 17644,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "33",
                      "id": 17643,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5637:1:65",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5632:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$3_storage_ptr",
                      "typeString": "uint256[3]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5631:22:65"
            },
            "scope": 17867,
            "src": "5563:143:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17679,
              "nodeType": "Block",
              "src": "6155:122:65",
              "statements": [
                {
                  "assignments": [
                    17665
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17665,
                      "name": "voter",
                      "nodeType": "VariableDeclaration",
                      "scope": 17679,
                      "src": "6165:18:65",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Voter_$17944_memory_ptr",
                        "typeString": "struct GenesisProtocolLogic.Voter"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 17664,
                        "name": "Voter",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 17944,
                        "src": "6165:5:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Voter_$17944_storage_ptr",
                          "typeString": "struct GenesisProtocolLogic.Voter"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17672,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17666,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18078,
                          "src": "6186:9:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 17668,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17667,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17655,
                          "src": "6196:11:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6186:22:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 17669,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "voters",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17993,
                      "src": "6186:29:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Voter_$17944_storage_$",
                        "typeString": "mapping(address => struct GenesisProtocolLogic.Voter storage ref)"
                      }
                    },
                    "id": 17671,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17670,
                      "name": "_voter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17657,
                      "src": "6216:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6186:37:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Voter_$17944_storage",
                      "typeString": "struct GenesisProtocolLogic.Voter storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6165:58:65"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17673,
                          "name": "voter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17665,
                          "src": "6241:5:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Voter_$17944_memory_ptr",
                            "typeString": "struct GenesisProtocolLogic.Voter memory"
                          }
                        },
                        "id": 17674,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "vote",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 17939,
                        "src": "6241:10:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 17675,
                          "name": "voter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17665,
                          "src": "6253:5:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Voter_$17944_memory_ptr",
                            "typeString": "struct GenesisProtocolLogic.Voter memory"
                          }
                        },
                        "id": 17676,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "reputation",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 17941,
                        "src": "6253:16:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17677,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "6240:30:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17663,
                  "id": 17678,
                  "nodeType": "Return",
                  "src": "6233:37:65"
                }
              ]
            },
            "documentation": "@dev voteInfo returns the vote and the amount of reputation of the user committed to this proposal\n@param _proposalId the ID of the proposal\n@param _voter the address of the voter\n@return uint256 vote - the voters vote\n       uint256 reputation - amount of reputation committed by _voter to _proposalId",
            "id": 17680,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteInfo",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17658,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17655,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17680,
                  "src": "6084:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17654,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6084:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17657,
                  "name": "_voter",
                  "nodeType": "VariableDeclaration",
                  "scope": 17680,
                  "src": "6105:14:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17656,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6105:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6083:37:65"
            },
            "returnParameters": {
              "id": 17663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17660,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17680,
                  "src": "6143:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17659,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6143:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17662,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17680,
                  "src": "6149:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17661,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6149:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6142:12:65"
            },
            "scope": 17867,
            "src": "6066:211:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17696,
              "nodeType": "Block",
              "src": "6621:61:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17689,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18078,
                          "src": "6638:9:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 17691,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17690,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17682,
                          "src": "6648:11:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6638:22:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 17692,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "votes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17985,
                      "src": "6638:28:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 17694,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17693,
                      "name": "_choice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17684,
                      "src": "6667:7:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6638:37:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17688,
                  "id": 17695,
                  "nodeType": "Return",
                  "src": "6631:44:65"
                }
              ]
            },
            "documentation": "@dev voteStatus returns the reputation voted for a proposal for a specific voting choice.\n@param _proposalId the ID of the proposal\n@param _choice the index in the\n@return voted reputation for the given choice",
            "id": 17697,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17682,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17697,
                  "src": "6552:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17681,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6552:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17684,
                  "name": "_choice",
                  "nodeType": "VariableDeclaration",
                  "scope": 17697,
                  "src": "6573:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17683,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6573:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6551:38:65"
            },
            "returnParameters": {
              "id": 17688,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17687,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17697,
                  "src": "6612:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17686,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6612:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6611:9:65"
            },
            "scope": 17867,
            "src": "6532:150:65",
            "stateMutability": "view",
            "superFunction": 20558,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17708,
              "nodeType": "Block",
              "src": "6906:47:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17705,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17699,
                        "src": "6934:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 17704,
                      "name": "_isVotable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20435,
                      "src": "6923:10:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (bytes32) view returns (bool)"
                      }
                    },
                    "id": 17706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6923:23:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 17703,
                  "id": 17707,
                  "nodeType": "Return",
                  "src": "6916:30:65"
                }
              ]
            },
            "documentation": "@dev isVotable check if the proposal is votable\n@param _proposalId the ID of the proposal\n@return bool true or false",
            "id": 17709,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isVotable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17700,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17699,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17709,
                  "src": "6857:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17698,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6857:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6856:21:65"
            },
            "returnParameters": {
              "id": 17703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17702,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17709,
                  "src": "6900:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17701,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6900:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6899:6:65"
            },
            "scope": 17867,
            "src": "6838:115:65",
            "stateMutability": "view",
            "superFunction": 20549,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17748,
              "nodeType": "Block",
              "src": "7366:258:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17722,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18078,
                              "src": "7401:9:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 17724,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17723,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17711,
                              "src": "7411:11:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7401:22:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 17725,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "preBoostedVotes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 17989,
                          "src": "7401:38:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 17727,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17726,
                          "name": "YES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18099,
                          "src": "7440:3:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7401:43:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17728,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18078,
                              "src": "7462:9:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 17730,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17729,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17711,
                              "src": "7472:11:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7462:22:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 17731,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "preBoostedVotes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 17989,
                          "src": "7462:38:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 17733,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17732,
                          "name": "NO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18096,
                          "src": "7501:2:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7462:42:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17734,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18078,
                              "src": "7522:9:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 17736,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17735,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17711,
                              "src": "7532:11:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7522:22:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 17737,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "stakes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 17997,
                          "src": "7522:29:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 17739,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17738,
                          "name": "YES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18099,
                          "src": "7552:3:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7522:34:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 17740,
                              "name": "proposals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18078,
                              "src": "7574:9:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                              }
                            },
                            "id": 17742,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 17741,
                              "name": "_proposalId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17711,
                              "src": "7584:11:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7574:22:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                              "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                            }
                          },
                          "id": 17743,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "stakes",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 17997,
                          "src": "7574:29:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 17745,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17744,
                          "name": "NO",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18096,
                          "src": "7604:2:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7574:33:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17746,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "7383:234:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17721,
                  "id": 17747,
                  "nodeType": "Return",
                  "src": "7376:241:65"
                }
              ]
            },
            "documentation": "@dev proposalStatus return the total votes and stakes for a given proposal\n@param _proposalId the ID of the proposal\n@return uint256 preBoostedVotes YES\n@return uint256 preBoostedVotes NO\n@return uint256 total stakes YES\n@return uint256 total stakes NO",
            "id": 17749,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proposalStatus",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17712,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17711,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17749,
                  "src": "7287:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17710,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7287:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7286:21:65"
            },
            "returnParameters": {
              "id": 17721,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17714,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17749,
                  "src": "7330:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17713,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7330:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17716,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17749,
                  "src": "7339:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17715,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7339:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17718,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17749,
                  "src": "7348:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7348:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17720,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17749,
                  "src": "7357:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17719,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7357:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7329:36:65"
            },
            "scope": 17867,
            "src": "7263:361:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17762,
              "nodeType": "Block",
              "src": "7904:63:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 17756,
                            "name": "proposals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18078,
                            "src": "7922:9:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                              "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                            }
                          },
                          "id": 17758,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17757,
                            "name": "_proposalId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17751,
                            "src": "7932:11:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7922:22:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                            "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                          }
                        },
                        "id": 17759,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "organizationId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 17953,
                        "src": "7922:37:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "id": 17760,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "7921:39:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 17755,
                  "id": 17761,
                  "nodeType": "Return",
                  "src": "7914:46:65"
                }
              ]
            },
            "documentation": "@dev getProposalOrganization return the organizationId for a given proposal\n@param _proposalId the ID of the proposal\n@return bytes32 organization identifier",
            "id": 17763,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getProposalOrganization",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17752,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17751,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17763,
                  "src": "7852:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17750,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7852:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7851:21:65"
            },
            "returnParameters": {
              "id": 17755,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17754,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17763,
                  "src": "7895:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17753,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7895:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7894:9:65"
            },
            "scope": 17867,
            "src": "7819:148:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17790,
              "nodeType": "Block",
              "src": "8321:118:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 17774,
                                "name": "proposals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18078,
                                "src": "8339:9:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                  "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                                }
                              },
                              "id": 17776,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 17775,
                                "name": "_proposalId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17765,
                                "src": "8349:11:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8339:22:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                                "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                              }
                            },
                            "id": 17777,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "stakers",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18001,
                            "src": "8339:30:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Staker_$17951_storage_$",
                              "typeString": "mapping(address => struct GenesisProtocolLogic.Staker storage ref)"
                            }
                          },
                          "id": 17779,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17778,
                            "name": "_staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17767,
                            "src": "8370:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8339:39:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Staker_$17951_storage",
                            "typeString": "struct GenesisProtocolLogic.Staker storage ref"
                          }
                        },
                        "id": 17780,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "vote",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 17946,
                        "src": "8339:44:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 17781,
                                "name": "proposals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18078,
                                "src": "8385:9:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                                  "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                                }
                              },
                              "id": 17783,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 17782,
                                "name": "_proposalId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 17765,
                                "src": "8395:11:65",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8385:22:65",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                                "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                              }
                            },
                            "id": 17784,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "stakers",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18001,
                            "src": "8385:30:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Staker_$17951_storage_$",
                              "typeString": "mapping(address => struct GenesisProtocolLogic.Staker storage ref)"
                            }
                          },
                          "id": 17786,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 17785,
                            "name": "_staker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 17767,
                            "src": "8416:7:65",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8385:39:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Staker_$17951_storage",
                            "typeString": "struct GenesisProtocolLogic.Staker storage ref"
                          }
                        },
                        "id": 17787,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 17948,
                        "src": "8385:46:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17788,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "8338:94:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17773,
                  "id": 17789,
                  "nodeType": "Return",
                  "src": "8331:101:65"
                }
              ]
            },
            "documentation": "@dev getStaker return the vote and stake amount for a given proposal and staker\n@param _proposalId the ID of the proposal\n@param _staker staker address\n@return uint256 vote\n@return uint256 amount",
            "id": 17791,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getStaker",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17765,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17791,
                  "src": "8243:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17764,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8243:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17767,
                  "name": "_staker",
                  "nodeType": "VariableDeclaration",
                  "scope": 17791,
                  "src": "8264:15:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17766,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8264:7:65",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8242:38:65"
            },
            "returnParameters": {
              "id": 17773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17770,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17791,
                  "src": "8303:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17769,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8303:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17772,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17791,
                  "src": "8312:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17771,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8312:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8302:18:65"
            },
            "scope": 17867,
            "src": "8224:215:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17807,
              "nodeType": "Block",
              "src": "8744:60:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 17800,
                          "name": "proposals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18078,
                          "src": "8761:9:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                            "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                          }
                        },
                        "id": 17802,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 17801,
                          "name": "_proposalId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 17793,
                          "src": "8771:11:65",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8761:22:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                          "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                        }
                      },
                      "id": 17803,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stakes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17997,
                      "src": "8761:29:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 17805,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 17804,
                      "name": "_vote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17795,
                      "src": "8791:5:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8761:36:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17799,
                  "id": 17806,
                  "nodeType": "Return",
                  "src": "8754:43:65"
                }
              ]
            },
            "documentation": "@dev voteStake return the amount stakes for a given proposal and vote\n@param _proposalId the ID of the proposal\n@param _vote vote number\n@return uint256 stake amount",
            "id": 17808,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "voteStake",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17793,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17808,
                  "src": "8677:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17792,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8677:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17795,
                  "name": "_vote",
                  "nodeType": "VariableDeclaration",
                  "scope": 17808,
                  "src": "8698:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8698:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8676:36:65"
            },
            "returnParameters": {
              "id": 17799,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17798,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17808,
                  "src": "8735:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17797,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8735:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8734:9:65"
            },
            "scope": 17867,
            "src": "8658:146:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17820,
              "nodeType": "Block",
              "src": "9043:58:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17815,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18078,
                        "src": "9060:9:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 17817,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17816,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17810,
                        "src": "9070:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9060:22:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 17818,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "winningVote",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17959,
                    "src": "9060:34:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17814,
                  "id": 17819,
                  "nodeType": "Return",
                  "src": "9053:41:65"
                }
              ]
            },
            "documentation": "@dev voteStake return the winningVote for a given proposal\n@param _proposalId the ID of the proposal\n@return uint256 winningVote",
            "id": 17821,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "winningVote",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17811,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17810,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17821,
                  "src": "8991:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17809,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8991:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8990:21:65"
            },
            "returnParameters": {
              "id": 17814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17813,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17821,
                  "src": "9034:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17812,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9034:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9033:9:65"
            },
            "scope": 17867,
            "src": "8970:131:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17833,
              "nodeType": "Block",
              "src": "9351:52:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 17828,
                        "name": "proposals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18078,
                        "src": "9368:9:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Proposal_$18002_storage_$",
                          "typeString": "mapping(bytes32 => struct GenesisProtocolLogic.Proposal storage ref)"
                        }
                      },
                      "id": 17830,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 17829,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17823,
                        "src": "9378:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9368:22:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Proposal_$18002_storage",
                        "typeString": "struct GenesisProtocolLogic.Proposal storage ref"
                      }
                    },
                    "id": 17831,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "state",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 17957,
                    "src": "9368:28:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ProposalState_$17903",
                      "typeString": "enum GenesisProtocolLogic.ProposalState"
                    }
                  },
                  "functionReturnParameters": 17827,
                  "id": 17832,
                  "nodeType": "Return",
                  "src": "9361:35:65"
                }
              ]
            },
            "documentation": "@dev voteStake return the state for a given proposal\n@param _proposalId the ID of the proposal\n@return ProposalState proposal state",
            "id": 17834,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "state",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17824,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17823,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17834,
                  "src": "9293:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17822,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9293:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9292:21:65"
            },
            "returnParameters": {
              "id": 17827,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17826,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17834,
                  "src": "9336:13:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ProposalState_$17903",
                    "typeString": "enum GenesisProtocolLogic.ProposalState"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17825,
                    "name": "ProposalState",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 17903,
                    "src": "9336:13:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ProposalState_$17903",
                      "typeString": "enum GenesisProtocolLogic.ProposalState"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9335:15:65"
            },
            "scope": 17867,
            "src": "9278:125:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17841,
              "nodeType": "Block",
              "src": "9584:29:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 17839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9601:5:65",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 17838,
                  "id": 17840,
                  "nodeType": "Return",
                  "src": "9594:12:65"
                }
              ]
            },
            "documentation": "@dev isAbstainAllow returns if the voting machine allow abstain (0)\n@return bool true or false",
            "id": 17842,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAbstainAllow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17835,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9553:2:65"
            },
            "returnParameters": {
              "id": 17838,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17837,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17842,
                  "src": "9578:4:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 17836,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9578:4:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9577:6:65"
            },
            "scope": 17867,
            "src": "9530:83:65",
            "stateMutability": "pure",
            "superFunction": 20563,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17853,
              "nodeType": "Block",
              "src": "9909:33:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 17849,
                        "name": "YES",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18099,
                        "src": "9927:3:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17850,
                        "name": "NO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18096,
                        "src": "9932:2:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 17851,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "9926:9:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 17848,
                  "id": 17852,
                  "nodeType": "Return",
                  "src": "9919:16:65"
                }
              ]
            },
            "documentation": "@dev getAllowedRangeOfChoices returns the allowed range of choices for a voting machine.\n@return min - minimum number of choices\nmax - maximum number of choices",
            "id": 17854,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAllowedRangeOfChoices",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17843,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9858:2:65"
            },
            "returnParameters": {
              "id": 17848,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17845,
                  "name": "min",
                  "nodeType": "VariableDeclaration",
                  "scope": 17854,
                  "src": "9883:11:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17844,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9883:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17847,
                  "name": "max",
                  "nodeType": "VariableDeclaration",
                  "scope": 17854,
                  "src": "9896:11:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17846,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9896:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9882:26:65"
            },
            "scope": 17867,
            "src": "9825:117:65",
            "stateMutability": "pure",
            "superFunction": 20570,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17865,
              "nodeType": "Block",
              "src": "10161:44:65",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17862,
                        "name": "_proposalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17856,
                        "src": "10186:11:65",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 17861,
                      "name": "_score",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20395,
                      "src": "10179:6:65",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (bytes32) view returns (uint256)"
                      }
                    },
                    "id": 17863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10179:19:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 17860,
                  "id": 17864,
                  "nodeType": "Return",
                  "src": "10171:27:65"
                }
              ]
            },
            "documentation": "@dev score return the proposal score\n@param _proposalId the ID of the proposal\n@return uint256 proposal score.",
            "id": 17866,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "score",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 17857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17856,
                  "name": "_proposalId",
                  "nodeType": "VariableDeclaration",
                  "scope": 17866,
                  "src": "10111:19:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 17855,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10111:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10110:21:65"
            },
            "returnParameters": {
              "id": 17860,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17859,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 17866,
                  "src": "10152:7:65",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17858,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10152:7:65",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10151:9:65"
            },
            "scope": 17867,
            "src": "10096:109:65",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 17868,
        "src": "220:9987:65"
      }
    ],
    "src": "0:10208:65"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.2",
  "updatedAt": "2021-08-23T07:33:52.584Z",
  "devdoc": {
    "methods": {
      "cancelVote(bytes32)": {
        "details": "Cancel the vote of the msg.sender. cancel vote is not allow in genesisProtocol so this function doing nothing. This function is here in order to comply to the IntVoteInterface ."
      },
      "constructor": {
        "details": "Constructor"
      },
      "execute(bytes32)": {
        "details": "execute check if the proposal has been decided, and if so, execute the proposal",
        "params": {
          "_proposalId": "the id of the proposal"
        },
        "return": "bool true - the proposal has been executed             false - otherwise."
      },
      "executeBoosted(bytes32)": {
        "details": "executeBoosted try to execute a boosted or QuietEndingPeriod proposal if it is expired",
        "params": {
          "_proposalId": "the id of the proposal"
        },
        "return": "uint256 expirationCallBounty the bounty amount for the expiration call"
      },
      "getAllowedRangeOfChoices()": {
        "details": "getAllowedRangeOfChoices returns the allowed range of choices for a voting machine.",
        "return": "min - minimum number of choices max - maximum number of choices"
      },
      "getNumberOfChoices(bytes32)": {
        "details": "getNumberOfChoices returns the number of choices possible in this proposal",
        "return": "uint256 that contains number of choices"
      },
      "getParametersHash(uint256[11],address)": {
        "details": "hashParameters returns a hash of the given parameters"
      },
      "getProposalOrganization(bytes32)": {
        "details": "getProposalOrganization return the organizationId for a given proposal",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "bytes32 organization identifier"
      },
      "getProposalTimes(bytes32)": {
        "details": "getProposalTimes returns proposals times variables.",
        "params": {
          "_proposalId": "id of the proposal"
        },
        "return": "proposals times array"
      },
      "getStaker(bytes32,address)": {
        "details": "getStaker return the vote and stake amount for a given proposal and staker",
        "params": {
          "_proposalId": "the ID of the proposal",
          "_staker": "staker address"
        },
        "return": "uint256 voteuint256 amount"
      },
      "isAbstainAllow()": {
        "details": "isAbstainAllow returns if the voting machine allow abstain (0)",
        "return": "bool true or false"
      },
      "isVotable(bytes32)": {
        "details": "isVotable check if the proposal is votable",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "bool true or false"
      },
      "proposalStatus(bytes32)": {
        "details": "proposalStatus return the total votes and stakes for a given proposal",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "uint256 preBoostedVotes YESuint256 preBoostedVotes NOuint256 total stakes YESuint256 total stakes NO"
      },
      "propose(uint256,bytes32,address,address)": {
        "details": "register a new proposal with the given parameters. Every proposal has a unique ID which is being generated by calculating keccak256 of a incremented counter.",
        "params": {
          "_organization": "address",
          "_paramsHash": "parameters hash",
          "_proposer": "address"
        }
      },
      "redeem(bytes32,address)": {
        "details": "redeem a reward for a successful stake, vote or proposing. The function use a beneficiary address as a parameter (and not msg.sender) to enable users to redeem on behalf of someone else.",
        "params": {
          "_beneficiary": "- the beneficiary address",
          "_proposalId": "the ID of the proposal"
        },
        "return": "rewards -          [0] stakerTokenReward          [1] voterReputationReward          [2] proposerReputationReward"
      },
      "redeemDaoBounty(bytes32,address)": {
        "details": "redeemDaoBounty a reward for a successful stake. The function use a beneficiary address as a parameter (and not msg.sender) to enable users to redeem on behalf of someone else.",
        "params": {
          "_beneficiary": "- the beneficiary address",
          "_proposalId": "the ID of the proposal"
        },
        "return": "redeemedAmount - redeem token amountpotentialAmount - potential redeem token amount(if there is enough tokens bounty at the organization )"
      },
      "score(bytes32)": {
        "details": "score return the proposal score",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "uint256 proposal score."
      },
      "setParameters(uint256[11],address)": {
        "details": "hash the parameters, save them if necessary, and return the hash value",
        "params": {
          "_params": "a parameters array   _params[0] - _queuedVoteRequiredPercentage,   _params[1] - _queuedVotePeriodLimit, //the time limit for a proposal to be in an absolute voting mode.   _params[2] - _boostedVotePeriodLimit, //the time limit for a proposal to be in an relative voting mode.   _params[3] - _preBoostedVotePeriodLimit, //the time limit for a proposal to be in an preparation                 state (stable) before boosted.   _params[4] -_thresholdConst   _params[5] -_quietEndingPeriod   _params[6] -_proposingRepReward   _params[7] -_votersReputationLossRatio   _params[8] -_minimumDaoBounty   _params[9] -_daoBountyConst   _params[10] -_activationTime",
          "_voteOnBehalf": "- authorized to vote on behalf of others."
        }
      },
      "shouldBoost(bytes32)": {
        "details": "shouldBoost check if a proposal should be shifted to boosted phase.",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "bool true or false."
      },
      "stake(bytes32,uint256,uint256)": {
        "details": "staking function",
        "params": {
          "_amount": "the betting amount",
          "_proposalId": "id of the proposal",
          "_vote": "NO(2) or YES(1)."
        },
        "return": "bool true - the proposal has been executed             false - otherwise."
      },
      "stakeWithSignature(bytes32,uint256,uint256,uint256,uint256,bytes)": {
        "details": "stakeWithSignature function",
        "params": {
          "_amount": "the betting amount",
          "_nonce": "nonce value ,it is part of the signature to ensure that a signature can be received only once.",
          "_proposalId": "id of the proposal",
          "_signature": "- signed data by the staker",
          "_signatureType": "signature type 1 - for web3.eth.sign 2 - for eth_signTypedData according to EIP #712.",
          "_vote": "NO(2) or YES(1)."
        },
        "return": "bool true - the proposal has been executed             false - otherwise."
      },
      "state(bytes32)": {
        "details": "voteStake return the state for a given proposal",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "ProposalState proposal state"
      },
      "threshold(bytes32,bytes32)": {
        "details": "threshold return the organization's score threshold which required by a proposal to shift to boosted state. This threshold is dynamically set and it depend on the number of boosted proposal.",
        "params": {
          "_organizationId": "the organization identifier",
          "_paramsHash": "the organization parameters hash"
        },
        "return": "uint256 organization's score threshold as real number."
      },
      "vote(bytes32,uint256,uint256,address)": {
        "details": "voting function",
        "params": {
          "_amount": "the reputation amount to vote with . if _amount == 0 it will use all voter reputation.",
          "_proposalId": "id of the proposal",
          "_vote": "NO(2) or YES(1).",
          "_voter": "voter address"
        },
        "return": "bool true - the proposal has been executed             false - otherwise."
      },
      "voteInfo(bytes32,address)": {
        "details": "voteInfo returns the vote and the amount of reputation of the user committed to this proposal",
        "params": {
          "_proposalId": "the ID of the proposal",
          "_voter": "the address of the voter"
        },
        "return": "uint256 vote - the voters vote       uint256 reputation - amount of reputation committed by _voter to _proposalId"
      },
      "voteStake(bytes32,uint256)": {
        "details": "voteStake return the amount stakes for a given proposal and vote",
        "params": {
          "_proposalId": "the ID of the proposal",
          "_vote": "vote number"
        },
        "return": "uint256 stake amount"
      },
      "voteStatus(bytes32,uint256)": {
        "details": "voteStatus returns the reputation voted for a proposal for a specific voting choice.",
        "params": {
          "_choice": "the index in the",
          "_proposalId": "the ID of the proposal"
        },
        "return": "voted reputation for the given choice"
      },
      "winningVote(bytes32)": {
        "details": "voteStake return the winningVote for a given proposal",
        "params": {
          "_proposalId": "the ID of the proposal"
        },
        "return": "uint256 winningVote"
      }
    },
    "title": "GenesisProtocol implementation -an organization's voting machine scheme."
  },
  "userdoc": {
    "methods": {}
  }
}